在底部更新。
我正在尝试做一个自我外部联接,对于每个记录,它返回它,并且所有其他记录的出现都晚于它,如果它本身是最新记录,则返回NULL。这是我的SQL代码:
SELECT A.[CR#], A.REGIS_STATUSDATE, B.REGIS_STATUSDATE
FROM CR_ADMIN_REGIS_STATUS A LEFT OUTER JOIN CR_ADMIN_REGIS_STATUS B
ON A.[CR#]=B.[CR#] AND A.REGIS_STATUSDATE < B.REGIS_STATUSDATE
我的问题是,对于给定的[CR#],A.REGIS_STATUSDATE为最大值(因此B.REGIS_STATUSDATE不能大于它),则该行不包括在我的结果中。
例如,如果CR_ADMIN_REGIS_STATUS看起来像这样:
CR# REGIS_STATUSDATE
1 5/1/12
1 5/2/12
1 5/3/12
2 5/1/12
2 5/2/12
我希望查询的结果是
CR# A.REGIS_STATUSDATE B.REGIS_STATUSDATE
1 5/1/12 5/2/12
1 5/1/12 5/3/12
1 5/2/12 5/3/12
1 5/3/12 NULL
2 5/1/12 5/2/12
2 5/2/12 NULL
相反,我得到这个:
CR# A.REGIS_STATUSDATE B.REGIS_STATUSDATE
1 5/1/12 5/2/12
1 5/1/12 5/3/12
1 5/2/12 5/3/12
2 5/1/12 5/2/12
鉴于我的查询是LEFT OUTER JOIN,并且我没有WHERE子句,因此我希望原始表中的所有行都在结果中,但事实并非如此。我在这里想念什么?
编辑:这是在Access 2007中
更新:我决定看看如果将表CR_ADMIN_REGIS_STATUS的各部分复制到单独的表中并对该表进行查询会发生什么。即使我只是将整个表直接复制到新表中(手动),查询仍然有效!但是,只有在实际复制和粘贴时才是这种情况,当我将SELECT * INTO到另一个表中时,问题仍然存在。
最终我发现,如果针对该查询运行
SELECT *
FROM CR_ADMIN_REGIS_STATUS
UNION ALL SELECT TOP 1 *
FROM CR_ADMIN_REGIS_STATUS;
而不是CR_ADMIN_REGIS_STATUS本身,我的查询返回了所需的结果。奇怪的。我也从一开始就对类似的表进行了类似的查询,因此看来这是仅限于该表的问题。
您什么都不会错过。 如果发生这种情况,那就是一个错误。
MS-
Access使用的引擎有几个错误。我已经在具有“复杂”ON
条件的联接中看到了类似的,不明确的行为。看到另一个SO问题,其中Access给出错误的结果:为什么我在Access中的左联接的行数少于左表?
您可以使用SQL-Server,Oracle,Postgres甚至MySQL中的相同数据尝试查询,这样您将获得正确的预期结果。
解决方法是,您可以尝试使用重写查询UNION
,但是永远不能确定正确性:
SELECT A.[CR#], A.REGIS_STATUSDATE, B.REGIS_STATUSDATE
FROM CR_ADMIN_REGIS_STATUS A
INNER JOIN CR_ADMIN_REGIS_STATUS B
ON A.[CR#]=B.[CR#]
AND A.REGIS_STATUSDATE < B.REGIS_STATUSDATE
UNION ALL
SELECT A.[CR#], A.REGIS_STATUSDATE, NULL
FROM CR_ADMIN_REGIS_STATUS A
WHERE NOT EXISTS
( SELECT *
FROM CR_ADMIN_REGIS_STATUS B
WHERE A.[CR#]=B.[CR#]
AND A.REGIS_STATUSDATE < B.REGIS_STATUSDATE
) ;
问题内容: 我有一个函数,该函数接受在where子句中使用的参数 函数(字符串x)->现在这将创建一个sql查询,该查询将 现在,我希望此函数提供所有行,即等于 当我通过x =“ All”时。 我想创建一个通用查询,当我传递“全部”时,它将返回所有行,否则将过滤我的结果。 问题答案: 只需将where条件排除在外即可。 如果您真的想要它那么复杂的用途 仅过滤空值。
我对一个< code>select有一些奇怪的问题。< code>WHERE子句中的顺序可能会影响结果吗? 这是我的选择: 这将重现这个结果:http://dl.dropbox.com/u/4892450/sqlSelectProblem/select1.PNG 当我使用这个条件时: (不同的顺序) 我得到一个不同的结果(参见 列): http://dl.dropbox.com/u/4892450
问题内容: 我有这个查询: 但是我想做这样的事情: 如何检查电子邮件是否存在?我要使用电子邮件,如果此字段为空,我要使用email2。我该如何完成? 问题答案: 用于选择字段,然后在其后放置该子句:
本章提供了有关如何使用JDBC应用程序从表中选择记录的示例。 这将在从表中选择记录时使用WHERE子句添加其他条件。 在执行以下示例之前,请确保您具备以下示例 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您正在使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the
我正在数据库雄辩的关系一对一,但写代码后,我得到一个错误: SQLSTATE[42S22]:未找到列:1054个未知列“posts”。在where子句中删除了“'in'”(SQL:) 此代码用于我链接用户id的post表 后表迁移 这是我要链接帖子的用户表 用户模型迁移 User.php代码 这是路线: Routes\web.php
本文向大家介绍node.js缺少mysql模块运行报错的解决方法,包括了node.js缺少mysql模块运行报错的解决方法的使用技巧和注意事项,需要的朋友参考一下 发现问题 在用node.js连接数据库,运行报错:cannot find module 'mysql; 然后 在管理员和用户下分别用npm安装数据库但是都是失败: 解决方法 按照错误日志应该是找不到文件夹,无法打开package.jso