MySQL 查询左联接问题
MySQL query left join issue
我有两个表:
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
但它不起作用。
WHERE pc.product_size = 5
AND pc.product_size = 6
将AND替换为OR即可。
试试这个查询:
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
如果我理解正确的话,您需要所有具有两种尺寸的产品。
所以你有不同的产品,每个产品都有不同的尺寸。并且您只需要同时出现(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 的产品)。
交集意味着找到出现在两组中的产品。
我有两个表:
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
但它不起作用。
WHERE pc.product_size = 5
AND pc.product_size = 6
将AND替换为OR即可。
试试这个查询:
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
如果我理解正确的话,您需要所有具有两种尺寸的产品。
所以你有不同的产品,每个产品都有不同的尺寸。并且您只需要同时出现(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 的产品)。
交集意味着找到出现在两组中的产品。