我的 SQL 知识非常有限,请多多包涵!
我试图根据与另一个表中的字段不匹配的字段之一返回一个表中的行。
我的一个表有一个 url 和站点字段,例如表 A。另一个表使用站点名称列出了一些站点,即表 B。
例如表 A 的 url 字段可能是 ' http://google.it/aaa ',其名称字段是'google'
在表 B 中,我有一个存储在“站点”和“名称”字段下的站点列表。示例如下:
一个条目: 地点 google.co.uk
姓名 谷歌
另一个条目: 地点 谷歌.fr
姓名 谷歌
第三个条目: 地点 bing.com
姓名 兵
我想返回表 A 中的值,其中 url 字段与表 B 中的“站点”字段不匹配。为此,我需要使用表 A 中的“名称”字段来查找“站点”表 B 中的值 - 如果没有匹配项,我希望返回条目。所以在这种情况下我的网址是'http://google.it/aaa ' 因此,当它检查表 B 中是否有 google.it 的条目时,它不会找到任何内容,因此会返回它。
我正在使用 MySQL 数据库,这两个表处于不同的架构中。我尝试过一些 SQL,结果如下:
SELECT tablea.url, tablea.name FROM schema1.tablea inside JOIN schema2.tableb ON tablea.url NOT LIKE ('%' || tableb.site || '%')
提前致谢
最佳答案
您想要使用EXISTS
和NOT EXISTS
:
SELECT
tablea.url,
tablea.name
FROM
schema1.tablea
WHERE
EXISTS
(SELECT
NULL
FROM
schema2.tableb
WHERE
tablea.name = tableb.name)
AND NOT EXISTS
(SELECT
NULL
FROM
schema2.tableb
WHERE
tablea.name = tableb.name
AND tablea.url LIKE ('%' || tableb.site || '%'))
这将为您提供 tablea 中的所有行,其中 tableb 中存在具有相同名称的行,但 tableb 中不存在具有相同名称且其站点包含 tablea 中的 url 的行。
关于mysql - 如何在一个数据库表中查找某个字段的值与另一表中的值不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14733443/