0

我有两张桌子

1号:

adresse
  id    name

2号:

produkte
  id    anbieter    

细节:

id: int
name: string
anbieter: int

produkte 中的每个 anbieter 都将成为地址中的 id。例如:

adresse
  id  name
  1   hello
  2   there

produkte
  id  anbieter    
  1   1
  2   1
  3   2
  4   1

工作,但是

adresse
  id  name
  1   hello
  2   there

produkte
  id  anbieter    
  1   4
  2   1
  3   2
  4   1

不是因为没有 produkte.anbieter = 4 的 adresse.id

我的目标是删除其 anbieter 没有 adresse.id 的所有 produkte 条目。

4

1 回答 1

1

使用 LEFT JOIN 查找不匹配的行并将其删除。

DELETE produkte.*
FROM produkte
LEFT JOIN adresse
ON produkte.anbieter = adresse.id
WHERE adresse.id IS NULL

LEFT JOIN就像INNER JOIN,除非左表 ( produkte) 中有一行在右表 ( adresse) 中没有符合ON条件的行。INNER JOIN 会将该行排除在结果之外,LEFT JOIN返回包含NULL所有右表列的行。然后,您可以使用WHERE <right-table>.<column> = NULL查找不匹配的行。

有关不同类型连接的更多说明,请参见:

SQL 连接的可视化解释

于 2013-06-22T01:27:39.193 回答