2012-03-16 4 views
4

テーブルserviceslanguagesを基本的に継承する結合テーブルlanguages_servicesがあります。少なくとも2つ以上の値が一致するように、結合テーブルで条件付きANDを使用するSQL

英語(language_id=1)とESPANOL (language_id=2)の両方に対応できるサービスを見つける必要があります。そうでないので、上記のデータで

table languages_services 
------------------------ 
service_id | language_id 
------------------------ 
1   | 1 
1   | 2 
1   | 3 
2   | 1 
2   | 3 

は、私は明らかにそれがのservice_id = 2と1を返しません結果は、この

QUERY RESULT 
------------ 
service_id 
------------ 
1 

のようになります。どこlanguage_id=1 AND language_id=2をテストしたいですサービスEspanol。

これに関するご質問は大変ありがとうございます。

答えて

5
SELECT 
    service_id 
FROM 
    language_services 
WHERE 
    language_id = 1 
    OR language_id = 2 
GROUP BY 
    service_id 
HAVING 
    COUNT(*) = 2 

それとも...

WHERE 
    lanaguage_id IN (1,2) 
GROUP BY 
    service_id 
HAVING 
    COUNT(*) = 2 

あなたが常に2つの言語で探しているなら、あなたが加入してそれを行うことに、しかし、集計バージョンはlanguage_idsの異なる数に適応することが容易です。 (ORを追加するか、INリストに項目を追加し、COUNT(*) = 2COUNT(*) = 3などに変更します)。

ただし、このスケールは非常に貧弱です。そして、このテーブル構造では、それについてはあまりできません。


EDIT例2つの言語

SELECT 
    lang1.service_id 
FROM 
    language_services AS lang1 
INNER JOIN 
    language_services AS lang2 
    ON lang1.service_id = lang2.service_id 
WHERE 
     lang1.language_id = 1 
    AND lang2.language_id = 2 
+0

恐ろしいのために結合を使用して、それが働きました!ありがとう。可能であれば、2つの言語の結合テーブルでどのように動作するかを、単にアイデアを得るために示すことができますか?それは大変感謝しています。 – chadwtaylor

+0

@chadwtaylor - 厳密に2つの言語のための 'JOIN'バージョンが追加されました – MatBailie

+0

あなたは素早い応答のために素晴らしいです!最初の2つの例は、複数の言語を集約することと結合するという点で優れていると言った理由を今すぐに知ることができます。 – chadwtaylor

関連する問題