1

次のような SQL テーブル tbl_client_condition があります。

id_client | id_condition
1         | A
1         | B
1         | C
2         | A
2         | B
3         | A
3         | B
3         | C
3         | D
4         | C
5         | C
5         | D

A、B、C の条件を持つすべてのクライアントを取得したいと考えています。その例では、クライアント 1 と 3 が必要です。

これを行う方法がよくわかりません。特に、必要な条件の数が定義されていません。これは、たとえば 2 つの条件 A と B で機能します。

SELECT a.id_client
FROM (
SELECT *
FROM tbl_client_condition
WHERE id_condition = A
) AS a
INNER JOIN (
SELECT *
FROM tbl_client_condition
WHERE id_condition = B
) AS b ON a.id_client = b.id_client

しかし、10 個の id_conditions のレコードが必要な場合、10 個の INNER JOIN を実行したくありません...

簡単な解決策があるに違いないと確信しています。

ありがとう

4

1 に答える 1

2

これを試して

SELECT [id_client] FROM table1
WHERE [id_condition] IN ('A','B','C')
GROUP BY [id_client]
HAVING COUNT(distinct [id_condition]) = 3

SQL FIDDLE

ここでは、条件COUNT(distinct [id_condition]) = 3で使用される値の数によって変化しますIN

于 2013-10-16T10:53:17.277 に答える