我有两张桌子:
product table
product_id product_name
1 sample1
2 sample2
3 sample3
product_child table
pc_id product_id product_size
1 1 5
2 1 6
3 1 7
4 2 5
5 2 8
6 2 7
7 3 8
8 3 6
9 3 9
我的问题是:
我想获得product_size(5或9)和6的所有产品
这意味着我想要结果:
product_id product_name
1 sample1
3 sample3
我需要查询:
SELECT p.*
FROM products p
LEFT JOIN product_child pc
ON pc.product_id = p.product_id
WHERE ( pc.product_size = 5 OR pc.product_size = 9)
AND pc.product_size = 6
但它不起作用。
答案 0 :(得分:1)
尝试此查询:
SELECT p.*
FROM products p
JOIN product_child pc1 ON pc1.product_id = p.product_id and pc1.product_size in (5,9)
JOIN product_child pc2 ON pc2.product_id = p.product_id and pc2.product_size = 6
答案 1 :(得分:1)
如果我理解正确,您需要所有具有两种尺寸的产品 所以你有不同的产品,每个产品都有不同的尺寸。而且您只希望这些产品同时出现(5或9)和6种尺寸 我想你需要这样的东西:
SELECT * from products where product_id IN
( SELECT product_id from product_child where product_size = 5 or product_size = 9
INTERSECT
SELECT product_id from product_child where product_size = 6
)
在上面的查询中我做了交集 我选择了一套(尺寸为5或9的产品)和第二套(尺寸为6的产品)。 交叉意味着找到出现在两组中的产品。
答案 2 :(得分:0)
WHERE pc.product_size = 5
AND pc.product_size = 6
将 AND 替换为 OR ,它会是正确的。