我有一个名为“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')
但它也排除了所有其他值。
非常感谢。