0

我的 SQL 知识非常有限,所以请多多包涵!

我试图根据与另一个表中的字段不匹配的字段之一返回一个表中的行。

我的一个表有一个 url 和站点字段,比如表 A。另一个表列出了一些站点,使用站点的名称,表 B。

例如,表 A 的 url 字段可能是“ http://google.it/aaa ”,其名称字段是“google”

在表 BI 中有一个存储在“站点”和“名称”字段下的站点列表。以下示例:

一项:网站 google.co.uk

名称谷歌

另一个条目:网站 google.fr

名称谷歌

第三个条目:网站 bing.com

名称 bing

我想返回表 A 中的值,其中 url 字段与表 B 中的“站点”字段不匹配。为此,我需要使用表 A 中的“名称”字段来查找表中的“站点”值B - 如果没有匹配项,我希望返回条目。所以在这种情况下,我的 url 是' http://google.it/aaa ',所以当它检查表 B 中是否有 google.it 的条目时,它不会找到任何东西并因此返回它。

我正在使用 MySQL db,这两个表位于不同的模式中。我已经尝试了一些 SQL,这就是我想出的:

SELECT tablea.url, tablea.name FROM schema1.tablea inner JOIN schema2.tableb ON tablea.url NOT LIKE ('%' || tableb.site || '%')

提前致谢

4

1 回答 1

1

你想使用EXISTSand 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 的行。

于 2013-02-06T16:14:03.047 回答