在mysql中使用不存在查找尚未分配的ID

时间:2018-12-03 14:04:38

标签: mysql

我有一个locnew表,该表具有仓库中所有位置的名称,因此:

1 | acb1
2 | acb7
3 | aba2

i还有一个location表,该表会将产品分配到位置,因此它将具有locnew id(location_description_id),然后是产品的所有详细信息。我写了这个查询来显示每个位置的所有项目:

select l.*
     , ln.location_description 
  from location l
  join locnew ln 
    on ln.id = l.location_description_id
 where l.location_description_id != 376

这给了我他们所处位置的所有库存

enter image description here

是否有一种不使用的方法可以解决这个问题,所以我可以在位置表中找到所有未分配任何产品的“ locnew” ID的列表?

2 个答案:

答案 0 :(得分:1)

您可以使用左联接

select l.*, ln.location_description 
    from location l
    left join locnew ln 
    on ln.id = l.location_description_id
    where ln.id is null

联接在概念上被定义为数学中的集合运算。

加入后,您将获得两个集合的交集。

离开联接时,您将采用两个集合的交集加上左边(第一个表)集合的其余成员。

当您右加入时,您将采用两个集合的交集以及右边(第二个表)集合的其余成员。

但是,如您所见,这三个选项均无法满足您的需求。您需要的是左侧集中的剩余零件。这就是将ln.id为null添加到where子句的原因。如果右侧没有记录,则ln.is为空,查询将为您提供所需的内容。

答案 1 :(得分:0)

此查询将为您提供所需的结果:

SELECT * FROM locnew ln
WHERE NOT EXISTS(SELECT 1 FROM location
                 WHERE location_description_id = l.id)