2014-04-10 21 views
-1

我有一個包含fk,pk和日期的表。有許多fk行與每個外鍵的日期。使用多個AND語句獲取空結果集

我試圖選擇不同的fk值與多個日期。

SELECT DISTINCT table.fk 
FROM table 
WHERE table.date = 'date1' 
    AND table.date = 'date2' 
    AND table.date = 'date3' 

它適用於一個日期,但是當我添加任何額外的AND時,它不會返回任何結果。我知道有fks有我要求的多個日期。

當我查看單日期的查詢計劃時,它看起來不錯,而且我擁有所有正確的索引,當我查看多個日期的查詢計劃時,它僅顯示一個「常量掃描」,它是查詢的100%成本和一個選擇是0%。

我也試過選擇pk使用相同的謂詞,但我得到相同的空結果集。

+2

在你查詢你說的日期是「日期1」 AND 'date2'和'date3'這是不可能的,你需要使用'或'或'IN' – dima

回答

2

當然date不能同時爲date1date2。我認爲你需要這個:

WHERE table.date = 'date1' 
    OR table.date = 'date2' 
    OR table.date = 'date3' 

WHERE table.date IN ('date1', 'date2', 'date3') 
+0

我不是這樣讀的。 「具有多個日期的不同fk值」我非常確定OP希望fk與所有這些日期沒有任何這些日期。 – Paparazzi

0

如果你通過不同的日期,它不可能找到一個以上的時間。

例如:

WHERE table.date = '20140410' 
AND table.date = '20130410' 
AND table.date = '20120410' 

你不能達到這個條件。

使用table.date IN(「DATE1」,「DATE2」,「DATE3」),而不是

1

我覺得這是你所要求的
這將是有這三個日期的FK(不這三個中的任何一個)
這將包括具有所有三個日期和附加日期的所有三個日期和fk的fk。

select fk 
    from table 
where date in ('date1','date2','date3') 
group by fk 
having count(distinct(date)) = 3 

如果表中的PK是FK,日期,那麼你可以使用count(*)

你也可以做到這一點:加入或相交,但是這是最簡單的(我認爲)

A,其中一次只
日期=日期1和日期= date2的評估單行將永遠是假的(如果DATE1 <> date2的)