从另一个表中键不匹配的表中获取所有行

时间:2013-11-07 18:05:40

标签: mysql sql

我有一个名为产品的表格和一个名为 product_description 的表格 它们都有一个名为 product_id 的列,用于链接它们。 如何从 product_des 表中获取 product_id 表中的所有行 没有在产品表中找到?

我试过了:

SELECT * 
FROM `product_description` 
JOIN product ON product_description.product_id = product.product_id
WHERE product_description.product_id != product.product_id

但是返回零行。

2 个答案:

答案 0 :(得分:1)

使用左外连接并找到没有匹配的位置:

SELECT product_description.* 
FROM `product_description` left outer join product
      on product_description.product_id = product.product_id
where product.product_id is null

答案 1 :(得分:0)

INNER JOIN过滤掉不匹配的内容。这就是为什么你的查询没有得到任何结果。您需要的是OUTER JOIN

SELECT * 
  FROM product_description d LEFT JOIN product p
    ON d.product_id = p.product_id
 WHERE p.product_id IS NULL

或者您可以使用带有NOT IN

的子查询
SELECT * 
  FROM product_description 
 WHERE product_id NOT IN
(
  SELECT product_id 
    FROM product
)

NOT EXISTS

SELECT * 
  FROM product_description d
 WHERE NOT EXISTS 
(
  SELECT * 
    FROM product
   WHERE product_id = d.product_id
)

以上是所有上述查询的 SQLFiddle 演示

要更好地了解JOIN,请参阅A Visual Explanation of SQL Joins