MySQL查询左连接问题

时间:2015-01-22 07:12:54

标签: mysql sql join relational-database

我有两张桌子:

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 

但它不起作用。

3 个答案:

答案 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 ,它会是正确的。