很抱歉,如果该标题没有解释清楚。
这是表......
我想选择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
的一部分则不会。< / p>
谢谢你们。
感谢您的所有答案。我的每日投票限额已达到,所以我明天会回来并投票给有用的答案。
答案 0 :(得分:1)
要使用category_id = 7切断记录,您应该检查每个product_id的所有记录。所以你需要一个子查询来使用:
SELECT
product_id,
category_id
FROM wp_wpsc_item_category_assoc AS a
WHERE
( category_id = 5
OR category_id = 6)
AND
NOT EXISTS (
SELECT *
FROM wp_wpsc_item_category_assoc AS b
WHERE a.product_id = b.product_id
AND b.category_id = 7
)
答案 1 :(得分:1)
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进行排除。
答案 2 :(得分:1)
我不确定我是否完全理解这个问题,但您可能需要使用联合或子查询。
我建议的第一个想法是:
SELECT product_id , category_id
FROM
(SELECT product_id , category_id
FROM wp_wpsc_item_category_assoc
WHERE product_id !=7)
WHERE (
product_id =5
OR product_id =6
)
我现在无法对此进行测试,因此括号可能略有偏差,但可能会显示您正在寻找的内容。
您的问题表明您对产品ID感兴趣,但您提供的样本会检查该类别,必要时进行切换......
答案 3 :(得分:0)
这适用于SQL Server,并且(应该)可以移植到MySQL。
解决方案的要点是排除任何与第7类相关的产品。
SELECT Product_ID
, Category_ID
FROM wp_wpsc_item_category_assoc a
LEFT OUTER JOIN (
SELECT Product_ID
FROM wp_wpsc_item_category_assoc
WHERE Category_ID = 7
) anot ON anot.Product_ID = a.ProductID
WHERE anot.Product_ID IS NULL
AND a.Category_ID IN (5, 6)