次の構造を持つ「survey_product」というテーブルがあります。
id int(11)
order_id int(11)
product_id int(11)
pq1 varchar(2)
pq2 varchar(2)
pq3 varchar(2)
このテーブルには、システムを通じて注文された製品が格納されます。
そして、ここにそのテーブルのいくつかのデータ レコードがあります。
(1, 2, 20, '1', '1', 'y')
(2, 2, 21, '1', 'y', 'y')
(3, 2, 22, '1', 'y', 'n')
(4, 2, 23, '1', 'y', 'y')
(5, 2, 24, '1', 'n', 'y')
(6, 3, 20, '1', 'n', 'y')
(7, 3, 24, '1', 'n', 'y')
(8, 3, 25, '1', 'n', 'y')
(9, 4, 20, '1', 'n', 'y')
(10, 4, 21, '1', 'n', 'y')
(11, 4, 23, '1', 'n', 'y')
(12, 4, 24, '1', 'n', 'y')
上記には 3 つの注文があります (order_id 2、3、および 4)。
product_id = 21 であるが product_id = 20 ではないすべての注文の order_id を取得する必要があります (注文の他の product_id は無関係です - 21 と 20 に興味があるだけです)。
次に、product_id が 20 と 21 の両方の注文を知る必要があります (ここでも、注文内の他の製品は関係ありません)。
これは、特定の製品のすべての注文を今すぐ取得するための基本的なクエリです。
SELECT order_id FROM survey_product
WHERE product_id = 20
AND (pq1 = '1' OR pq1 = '2' OR pq1 = '3')
どうすればそれを達成できるかについてのアイデアはありますか?
私が試してみました
SELECT order_id FROM survey_product
WHERE product_id IN (20) AND product_id NOT IN (21)
AND (pq1 = '1' OR pq1 = '2' OR pq1 = '3')
ただし、他のすべての値も除外しています。
どうもありがとう。