我有表 B 和表 A。表 B 包含我需要提取的日期记录。但是,我只想在以下情况下拉动它们:
诀窍是我没有钥匙可以加入表格。所以,我使用 Item 列和 date 列来加入。(注意两个项目可以有相同的日期。也可以有多个相同的项目,但日期也不同。)
所以表 B 可能有:
[Item] [Qty] [Date]
F-001100, 400 7/14/2016
F-002200, 750 7/28/2016
F-000767, 1000 7/28/2016
F-006006, 300 8/01/2016
F-002200, 900 7/30/2016
Run Code Online (Sandbox Code Playgroud)
表A可能有:
[Item] [Status] [Qty] [Date0] [Date2] [Date3] [Date4]
F-001100, 1, 400 7/14/2016 7/15/2016 7/16/2016 7/17/2016
F-002200, 0, 750 7/28/2016 7/29/2016 7/30/2016 7/31/2016
Run Code Online (Sandbox Code Playgroud)
所以结果集应该是:
[Item] [Qty] [Date]
F-002200, 750 7/28/2016
F-000767, 1000 7/28/2016
F-006006, 300 8/01/2016
F-002200, 900 7/30/2016 <--- I can't get this to show up!!
Run Code Online (Sandbox Code Playgroud)
匹配是这样的:
WHERE A.[Item] = B.[Item]
AND ( A.[Date1] = B.[Date]
OR A.[Date2] = B.[Date]
OR A.[Date3] = B.[Date]
OR A.[Date4] = B.[Date] )
Run Code Online (Sandbox Code Playgroud)
And*_*y M 10
看起来您的两个条件可以简化为一个:
基于此,您的 SQL 查询可能如下所示:
SELECT
B.*
FROM
B
WHERE
NOT EXISTS
(
SELECT
*
FROM
A
WHERE
A.Status = 1
AND B.Item = A.Item
AND B.Date IN (A.Date1, A.Date2, A.Date3, A.Date4)
)
;
Run Code Online (Sandbox Code Playgroud)
因此,如果表 A 在Item和Date上根本没有匹配项,则 NOT EXISTS 谓词将评估为True。如果存在匹配且其状态为 0,则由于状态条件,谓词将再次为真。