如果我有一個表t1,它看起來像記錄在項目,大小和日期組合上是唯一的;選擇在一個日期但不在另一個日期上的記錄?
item size date
1234 S 2013-02-11
1234 M 2013-02-11
1234 L 2013-02-11
9999 S 2013-02-11
9999 M 2013-02-11
9999 L 2013-02-11
1234 S 2013-02-13
1234 M 2013-02-13
1234 L 2013-02-13
9999 S 2013-02-13
9999 M 2013-02-13
如何檢索2013-02-13與2013-02-11相比缺少的項目和尺寸?
我找的是回報,
item size
9999 L
我都試過;
SELECT ta.item,
ta.size
FROM t1 ta
LEFT JOIN t1 tb
ON ta.item = tb.item
AND ta.size = tb.size
WHERE ta.date = '2013-02-11'
AND tb.date = '2013-02-13'
AND tb.size IS NULL
和
SELECT item, size
FROM t1
WHERE t1.date = '2013-02-11'
AND NOT EXISTS (
SELECT item, size
FROM t1
WHERE t1.date = '2013-02-13'
)
都返回空集。
我設法讓這個工作的唯一方法是使用臨時表;
CREATE temporary table temp1
SELECT * FROM t1 WHERE date = '2013-02-11';
CREATE temporary table temp2
SELECT * FROM t1 WHERE date = '2013-02-13';
SELECT temp1.item, temp1.size FROM temp1
LEFT JOIN temp2
ON temp1.item = temp2.item AND temp1.size = temp2.size
WHERE temp2.size IS NULL
臨時表是不可能的。我怎樣才能實現這一點,而不使用臨時表?
非常感謝,
(請溫柔,我剛開始出來的!)
+1,但如果您在分組之前將行限制爲('2013-02-11','2013-02-13')'中的日期,則可以簡化兩種情況下的「有」條件。 – 2013-02-23 16:36:44
@AndriyM。 。 。是的,對於這個特定的問題,這是一個好主意。 – 2013-02-23 16:37:20
謝謝Gordon,儘管我不得不承認我不太明白 - 我會研究這個,因爲額外的靈活性可能會非常有用 – 2013-02-24 07:43:57