使用左外連接真的效果很好的情況是這樣的:
SELECT
o.WorkOrder
FROM
SMWorkOrder o
LEFT JOIN SMWorkCompleted c
ON o.WorkOrder = c.WorkOrder
AND c.Date >= DATEADD(WEEK,-2,CAST(GETDATE() AS DATE)) AND c.Date <= GETDATE()
AND c.SMCo = 1
WHERE
c.WorkOrder is NULL
AND o.SMCo = 1
但請注意,我懷疑你有釤鈷兩個表也許你做,但你應該從哪裏條件,如果不將其刪除SWorkOder表和/或從接通狀態中刪除該參加如果在SWorkCompleted表
對於在方法你真的想未使用:
SELECT
o.WorkOrder
FROM
SWorkOrder o
WHERE
o.SMCo = 1
AND o.WorkOrder NOT IN (
SELECT
WorkOrder
FROM
SMWorkCompleted c
WHERE
c.Date >= DATEADD(WEEK,-2,CAST(GETDATE() AS DATE)) AND c.Date <= GETDATE()
AND c.SMCo = 1
)
注意如果WorkOrder可能爲NULL,請勿使用!
的NOT EXISTS方法效果很好過:
SELECT
o.WorkOrder
FROM
SWorkOrder o
WHERE
o.SMCo = 1
AND NOT EXISTS (
SELECT
WorkOrder
FROM
SMWorkCompleted c
WHERE
c.WorkOrder = o.WorkOrder
AND c.Date >= DATEADD(WEEK,-2,CAST(GETDATE() AS DATE)) AND c.Date <= GETDATE()
AND c.SMCo = 1
)
這是一個有點混亂。你的桌子是什麼樣的?您是否說過在過去的兩週內工作訂單可以,也不能有活動?您還使用了哪些DBMS? – CodyMR
SWorkCompleted或SWorkOrder或兩者都是smco嗎? – Matt
SMWorkOrder表保存所有的WO。 SMWorkCompleted持有工單上的活動。每個「活動」是SMWorkCompleted表中的一行,幷包含日期字段。這張桌子也有WO。 SMCo在兩個表中都需要限制爲1 我希望在過去兩週內獲得所有尚未開展活動的工作訂單(SMWorkCompleted表中的新條目)。工作單可以在該表中具有在過去兩週和之前的日期的行。那份工作令我不想看到。只有那些在過去兩週之前只有*行* – MAT