mysql - 如何在一个数据库表中查找某个字段的值与另一表中的值不同的行

标签 mysql sql

我的 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 || '%')

提前致谢

最佳答案

您想要使用EXISTSNOT 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/

相关文章:

sql - 如何在一个 oracle 表中查找多个对

mysql - 我可以在 SQL 中使用变量吗?如果没有,如何避免这种情况?

mysql - 使用 select 插入时重复记录

php - UNION ALL 运算符的意外行为

mysql - 即使 sql 查询正确也返回空集

sql - PL/SQL 尝试将 tableID 显示为另一个表名称

php - mysql where子句中如何检查多个字段的空值

sql - 主键和唯一约束之间的主要区别是什么?

SQL Server : select distinct mon-yyyy format output sorty by descending order

Mysql查询修改