我认为这是一个直截了当的编写查询,但事实证明它比我最初想的要复杂得多。
任何帮助都会非常感激 - 它正在推动我的发展:)
我有两张桌子,一张是第二张用户;采购产品。用户可以在PRODUCTS表中拥有多个产品。
我有一个加入的查询,我返回一个具有特定产品的用户列表 - 到目前为止一直很好。
现在问题在于:
我想排除拥有其他特定产品的用户。
因此,仅返回具有产品1001的用户,而不是在PRODUCTS表中同时具有产品1001和1002的用户。
答案 0 :(得分:2)
SELECT u.*
FROM users u
INNER JOIN purchased_products p
ON u.user_id = p.user_id
AND p.product_id = 1001
WHERE NOT EXISTS(SELECT 1
FROM purchased_products p2
WHERE p2.product_id = 1002
AND p2.user_id = u.user_id)
答案 1 :(得分:0)
SELECT * from `user`
LEFT JOIN `product` on `user`.`id` = `product`.`user_id`
WHERE `product`.`id` = <w1st_product_id>
AND `user`.`id` NOT IN (
SELECT user_id
FROM product
WHERE product.id = <2nd_product_id>
)
答案 2 :(得分:0)
SELECT * from user U
where (select count(*) from product P where P.user_id=U.user_id)=1
答案 3 :(得分:0)
略有不同的方法:
SELECT u.user_id
FROM users u
JOIN purchased_products p
ON u.user_id = p.user_id AND
p.product_id in (1001, 1002)
GROUP BY u.user_id
HAVING COUNT(DISTINCT p.product_id) = 1 AND
MIN(p.product_id) = 1001
答案 4 :(得分:0)
仅返回具有产品1001的用户,而不返回在PRODUCTS表中同时具有产品1001和1002的用户。
如果您使用的是SQL Server 2005或更高版本,则可以使用
SELECT U.Id
FROM [User] U INNER JOIN Product P ON U.Id = P.UserId AND P.ProductId = 1001
EXCEPT
SELECT U.Id
FROM [User] U INNER JOIN Product P ON U.Id = P.UserId AND P.ProductId = 1002
,正如“EXCEPT
”所暗示的那样,将为具有产品1002的用户返回ID,除非他们还有产品1002。