1

特定の質問に「はい」、別の質問に「いいえと答えた顧客を取得するために、次のクエリがあります。

SELECT customers.id
FROM customers, responses
WHERE (
(
responses.question_id = 5
AND responses.value_enum = 'YES'
)
OR (
responses.question_id = 9
AND responses.value_enum = 'NO'
)
)
GROUP BY customers.id

これは問題なく動作します。ただし、クエリを変更して、特定の質問に「はい」と答え、別の質問に「いいえ」答えた顧客を取得したいと思います。

これをどのように達成できるかについてのアイデアはありますか?

PS-上記の表の応答はEAV形式です。行は列ではなく属性を表します。

4

2 に答える 2

3

応答テーブルに customer_id という列があると仮定しています。応答テーブルをそれ自体に結合してみてください。

SELECT Q5.customer_id
FROM responses Q5
JOIN responses Q9 ON Q5.customer_id = Q9.customer_id AND Q9.question_id = 9
WHERE Q5.question_id = 5
AND Q5.value_enum = 'YES'
AND Q9.value_enum = 'NO'
于 2010-07-17T15:39:57.867 に答える
0

おおよそ次のとおりです。

SELECT distinct
  c.id
FROM 
  customers c
WHERE
  exists (select 1 from responses r where r.customer_id = c.id and r.response_id = 5 and r.value_enum = 'YES')
  and exists (select 1 from responses r2 where r2.customer_id = c.id and r2.response_id = 9 and r2.value_enum = 'NO')

欠落しているjoin条件を仮定しました。スキーマに合わせて修正してください。

于 2010-07-17T15:38:07.197 に答える