Mysql 从表中获取键在另一个表中不匹配的所有行
我有一个名为products的表和一个名为product\u description的表 它们都有一个名为product_id的列,用于链接它们。 如何从product_id为的product_description表中获取所有行 在产品表中找不到 我试过这个: 选择* 来自“产品描述” 在product\u description.product\u id=product.product\u id上加入产品 其中product_description.product_id!=product.product\u id 但返回的行数为零。内部联接过滤掉不匹配的行数。这就是为什么您的查询没有得到任何结果。你需要的是外部连接 或者,可以使用不在中的子查询 或者不存在 下面是所有上述查询的演示Mysql 从表中获取键在另一个表中不匹配的所有行,mysql,sql,Mysql,Sql,我有一个名为products的表和一个名为product\u description的表 它们都有一个名为product_id的列,用于链接它们。 如何从product_id为的product_description表中获取所有行 在产品表中找不到 我试过这个: 选择* 来自“产品描述” 在product\u description.product\u id=product.product\u id上加入产品 其中product_description.product_id!=product.p
要更好地理解联接,请参见使用左外部联接并查找不匹配的位置:
SELECT product_description.*
FROM `product_description` left outer join product
on product_description.product_id = product.product_id
where product.product_id is null
不管您缺少的左连接是什么,您似乎都存在一个引用完整性问题:您如何拥有没有产品的产品描述?因为我正在修改旧系统中的表以移动到新系统中,而旧系统被弄乱了,不在其中,空值也无法正常使用请参见此。没有足够的信息来假设其中没有空值,特别是在出现此引用完整性问题之后。@MostyMostacho这是一个常见的事实,正如您所说,没有足够的信息,但可以假设product_id是一个PK,是的,有一种方法可以以空安全的方式重新写入它。不过还是要谢谢你的意见。
SELECT *
FROM product_description
WHERE product_id NOT IN
(
SELECT product_id
FROM product
)
SELECT *
FROM product_description d
WHERE NOT EXISTS
(
SELECT *
FROM product
WHERE product_id = d.product_id
)
SELECT product_description.*
FROM `product_description` left outer join product
on product_description.product_id = product.product_id
where product.product_id is null