sql - 如何从多对多表中选择一条记录,其中一个 ID 存在于一个表中,而另一个表中不存在?

标签 sql mysql

抱歉,如果标题没有很好地解释它。

这是表格...

product id to category id
(来源:alexanderdickson.com)

我想选择 product_id 它在 56 中,但如果它在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_id56,但如果它也是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/

相关文章:

php - Mysql 到 mysqli php

c# - 从一行中的字符串列表构建 SQL "where in"语句?

sql - 按字符降序显示数据 - postgresql

MySQL同表子查询

mysql - 查询以更新 SQL 中的特定列字段

MYSQL:多重连接

mysql - sql查询速度的问题

sql - 无法在 Excel 中查询名称中带有空格的工作表上的命名范围

mysql - 如何在 MySQL 查询中转换 MySQL 日期?

javascript - 如何在 node.js 的外部函数中使用内部结果