抱歉,如果标题没有很好地解释它。
这是表格...
(来源:alexanderdickson.com)
我想选择 product_id
它在 5
或 6
中,但不如果它在7
。
也许我已经失去了情节,但我想出了这个查询
SELECT `product_id` , `category_id`
FROM `wp_wpsc_item_category_assoc`
WHERE (
`category_id` =5
OR `category_id` =6
)
AND `category_id` !=7
LIMIT 0 , 30
显然,由于多对多关系,这仍然会返回 category_id
为 7 的记录,在本例中,product_id
为 12 的产品。
如何更改此查询以获取所有产品的 category_id
为 5
或 6
,但如果它也是7
的一部分。
谢谢你们。
更新
感谢您的所有回答。我的每日投票已达到上限,所以我明天会回来投票给有用的答案。
最佳答案
SELECT product_id, category_id
FROM wp_wpsc_item_category_assoc WINC
WHERE WINC.category_id IN (5, 6)
AND NOT EXISTS
(SELECT 0 FROM wp_wpsc_item_category_assoc WEXC
WHERE WEXC.product_id = WINC.product_id
AND WEXC.category_id IN (7))
我们使用子查询对每个特定的 product_id 进行排除。
关于sql - 如何从多对多表中选择一条记录,其中一个 ID 存在于一个表中,而另一个表中不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447421/