加入table2,其中table1结果不匹配

时间:2017-09-15 11:41:06

标签: mysql join

我有一个小的table1,其路径如foo/bar

我有一个大表2,其中包含https://www.google.com/foo/bar/等完整网址。

我想选择table1路径,这些路径在table2中的完整URL中不存在。

我尝试使用REGEXP进行JOIN,但查询速度很慢,我可能选择了错误的连接:

SELECT t1.path
FROM table1 AS t1
RIGHT JOIN `table2` AS  t2
        ON ( REPLACE(t1.path, '/', '\\/') REGEXP ".+" + t2.url + ".*" )
WHERE t1.path != ""
ORDER BY t1.id DESC
LIMIT 10

使用NOT IN的子查询可能会有所帮助,但我不确定如何使用第一个查询的结果路径:

SELECT path
FROM `table1`
WHERE path != ""
    NOT IN (
            SELECT url FROM `table2` WHERE url LIKE "%" + [path of query 1] + "%"
           )
ORDER BY id DESC
LIMIT 10

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以将子查询与此{/ 1}}一起使用

LIKE

但正如Gordon Linoff已经指出的那样,您的数据不适合快速加入。此查询将很慢,因为使用字符串的SELECT path FROM `table1` WHERE TRIM(path) <> '' AND NOT EXISTS ( SELECT url FROM `table2` WHERE url LIKE CONCAT('%', t1.path, '%') ) ORDER BY id DESC LIMIT 10 操作非常昂贵。