2017-04-13 31 views
-1

當我使用IN時,它顯示所有記錄包含參數1或參數2,但我希望它帶來的記錄恰好包含它們兩個,而不僅僅是它們中的一個。如何在sql中過濾表中包含正好兩個值的記錄?

如果我的問題不清楚,我可以再試一次。

select Hatlar.Name 
from HATLAR, 
    [HAT-DURAK], 
    DURAKLAR 
where HATLAR.Hat_Id = [HAT-DURAK].Hat_Id 
    and DURAKLAR.Durak_Id = [HAT-DURAK].Durak_Id 
    and DURAKLAR.Name IN ('parameter1', 'parameter2') 
+1

提示:切換到現代的,明確的'JOIN'語法。易於編寫(沒有錯誤),更易於閱讀和維護,並且在需要時更容易轉換爲外部聯接。 – jarlh

+0

[Make in clause to match all items any any alternative?](http://stackoverflow.com/questions/11430310/make-in-clause-to-match-all-items-ot-any-alternative) –

+0

您正在使用哪些DBMS? (這是無效的標準SQL) –

回答

1

做一個GROUP BY。使用having count distinct來確保兩個DURAKLAR.Names都在那裏。

select Hatlar.Name 
from HATLAR, 
    [HAT-DURAK], 
    DURAKLAR 
where HATLAR.Hat_Id = [HAT-DURAK].Hat_Id 
    and DURAKLAR.Durak_Id = [HAT-DURAK].Durak_Id 
    and DURAKLAR.Name IN ('parameter1', 'parameter2') 
group by Hatlar.Name 
having count(distinct DURAKLAR.Name) = 2 
+0

非常感謝你的工作:) – cengavera

1

首先,學會使用正確的JOIN語法。 FROM條款中的逗號都是20世紀的。

其次,你可以做你想做與GROUP BYHAVING什麼:

Select h.Name 
from HATLAR h join 
    [HAT-DURAK] hd 
    on h.Hat_Id = hd.Hat_Id join 
    DURAKLAR d 
    on d.Durak_Id = d.Durak_Id 
where d.Name IN ('parameter1', 'parameter2') 
group by n.Name 
having count(d.Name) = 2; 

注:如果重複可以在結表上,然後使用count(distinct d.Name)

+0

謝謝你提前知道我知道它,當然,但我只是寫了。 – cengavera

0

如果我理解這個問題,這應該工作(假定參數實際上是,而不是硬編碼的字符串):今天的

select Hatlar.Name 
from HATLAR, 
    [HAT-DURAK], 
    DURAKLAR 
where HATLAR.Hat_Id = [HAT-DURAK].Hat_Id 
    and DURAKLAR.Durak_Id = [HAT-DURAK].Durak_Id 
    and DURAKLAR.Name Like '%' + @parameter1 + '%' 
    and DURAKLAR.Name Like '%' + @parameter2 + '%' 
相關問題