【发布时间】:2016-08-18 13:46:01
【问题描述】:
还有另一个类似的答案,但它有 2 页长,我的要求不需要。我有 2 个表,tableA 和一个 tableB,我需要找到 tableA 中存在但 tableB 中不存在的行的计数,或者如果 tableB 中的 update_on 不是今天的日期。
我的桌子:
tableA:
release_id book_name release_begin_date
----------------------------------------------------
1122 midsummer 2016-01-01
1123 fool's errand 2016-06-01
1124 midsummer 2016-04-01
1125 fool's errand 2016-08-01
tableB:
release_id book_name updated_on
-----------------------------------------
1122 midsummer 2016-08-17
1123 fool's errand 2016-08-16**
预期结果:由于每本书都缺少一个版本 ID,因此计数为 1。但是另外表B中的傻瓜差事已有的行updated_on日期是昨天而不是今天,需要计入count_of_not_updated。
book_name count_of_missing count_of_not_updated
-------------------------------------------------------
midsummer 1 0
fool's errand 1 1
注意:即使傻瓜的差事出现在表 B 中,我也需要在 count_of_missing 中显示它,因为它的 updated_on 日期是昨天而不是今天。我知道它必须是左连接和其他东西的组合,但这里的踢球者不仅从左表中获取丢失的行,而且同时检查 updated_on 表是否是今天的日期,如果不是,则计算该行在 count_of_not_updated 中。
【问题讨论】:
-
我发现您的最后一个注释有点令人困惑 - 从您的预期结果看来,您有 1 个因傻瓜差事而丢失(ID 1125)和 1 个未更新(1123)。但是您是说您还需要 1123 才能算作失踪?那么在 count_of_missing 列中,傻瓜的差事不会是 2 吗?
-
@TPhe - 傻瓜的差事丢失了一行,因此 count_of_missing 中为 1,但表 B 中用于傻瓜差事的现有行的更新日期不是今天(当前日期/getdate()),因此count_of_not_updated 中的 1 个。与 midsummer 不同,它缺少一行,并且存在的行的 updated_on 日期为今天(当天)
-
好的,在这种情况下,我将编辑我的查询。您的问题“注意:即使傻瓜的差事出现在表 B 中,我也需要在 count_of_missing 中显示它,因为它的更新日期是昨天而不是今天”中的句子仍然让我感到困惑。
-
请阅读this,了解一些改进问题的技巧。使用适当的软件(MySQL、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如
sql-server-2014。语法和功能的差异通常会影响答案。
标签: sql-server tsql