如何为这种情况编写 SQL 查询?

How to write an SQL query for this scenerio?

我正在尝试编写一个查询,其中我希望表 2 中的表 1 中的所有项目满足下面的第一个内部联接条件(这是工作查找)。

然后我想查看table3是否有异常。例外情况基于参考编号 (REF_NO)。如果表 3 中存在参考编号,那么我需要检查商店编号 (STORE_NO) 是否匹配。如果它们匹配,那么我想要 table1 中的匹配记录。如果不是,则从 table1 中排除匹配记录。

但是,如果表 3 中不存在引用编号,那么我需要表 1 中与表 2 匹配的记录。

谢谢

USE master
GO

table1
table2
table3

SELECT
   T1.TERMINAL,
   T1.OPERATOR,
   T1.TRANS_NO,
   T1.SEQ_NO,
   T1.STORE_NO,
   T2.REF_NO,
   T2.SDATE,
   T2.EDATE,
   T1.POS_DATE,
   T1.ITEM,
   T1.ITYPE,
   T1.SOLD_QTY,
   T1.PRICE,
   T2.OI_AMT
FROM [table1] As T1

INNER JOIN [table2] As T2
ON (T1.ITEM = T2.ITEM)  And (T1.POS_DATE BETWEEN T2.SDATE And T2.EDATE)

INNER JOIN [table3] As T3
ON (T2.REF_NO = T3.REF_NO) And (T1.STORE_NO = T3.STORE)
SELECT
   T1.TERMINAL,
   T1.OPERATOR,
   T1.TRANS_NO,
   T1.SEQ_NO,
   T1.STORE_NO,
   T2.REF_NO,
   T2.SDATE,
   T2.EDATE,
   T1.POS_DATE,
   T1.ITEM,
   T1.ITYPE,
   T1.SOLD_QTY,
   T1.PRICE,
   T2.OI_AMT
FROM [table1] As T1
INNER JOIN [table2] As T2
    ON T1.ITEM = T2.ITEM
    AND T1.POS_DATE > T2.SDATE 
    AND T1.POS_DATE <= T2.EDATE
WHERE EXISTS (  SELECT TOP (1) 1
                FROM table3 as T31
                WHERE T2.REF_NO = T31.REF_NO
                AND T1.STORE_NO = T31.STORE)
OR NOT EXISTS ( SELECT TOP (1) 1
                FROM table3 as T32
                WHERE T2.REF_NO = T32.REF_NO)

这应该可行,它会检查您的两个条件。我也鼓励您不要使用 BETWEEN 子句并使用两个条件指定日期范围。