Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL左连接,如CONCAT通配符_Mysql_Sql - Fatal编程技术网

MySQL左连接,如CONCAT通配符

MySQL左连接,如CONCAT通配符,mysql,sql,Mysql,Sql,我有一个包含我们网站不同信息的数据库。一个名为Raw_Pages的表包含我们网站上每个页面的列表,当然还有其他字段。另一个名为“路径”的表包含由不同部门拥有的站点的各个分支的列表 我试图运行一个查询,基本上查找站点上不属于指定分支之一的所有页面 表格原始页面 +-------------+-------+ |字段类型| +-------------+-------+ |ID | int11| |路径| varchar500| |标题| varchar255| +-------------+---

我有一个包含我们网站不同信息的数据库。一个名为Raw_Pages的表包含我们网站上每个页面的列表,当然还有其他字段。另一个名为“路径”的表包含由不同部门拥有的站点的各个分支的列表

我试图运行一个查询,基本上查找站点上不属于指定分支之一的所有页面

表格原始页面 +-------------+-------+ |字段类型| +-------------+-------+ |ID | int11| |路径| varchar500| |标题| varchar255| +-------------+-------+ 表路径 +-----+-------+ |字段类型| +-----+-------+ |ID | int11| |路径| varchar255| +-----+-------+ 我们目前有64002页,我正在检查757条路径,所有部门都有多个分支,因为不同的文件类型有不同的分支。我还计划对文件进行类似的查询,其中我们有306625个文件,并从757个路径的相同列表中提取。是的,我们的网站一团糟

据我所知,左边的连接对我来说最合适,右边有一个通配符。我是一个代码新手,所以我可能会很遥远

选择*FROM Raw_Pages LEFT JOIN path ON Raw_Pages.path LIKE CONCATPaths.path,“%”,其中Paths.ID为空 老实说,我不确定上面的代码是否有效,因为当我尝试它时,它只是冻结了phpMyAdmin。我认为这里面有什么不对劲,或者有更好的办法

谢谢大家!

如果您在PathsPath上有索引,您可能可以执行以下操作:

select rp.*
from raw_pages rp
where not exists (select 1
                  from paths p
                  where p.path <= rp.path and
                        p.path > concat(rp.path, '(')
                 );
子查询可以使用索引。我不确定它是否会。如果您在PathsPath上有索引,您可能可以执行以下操作:

select rp.*
from raw_pages rp
where not exists (select 1
                  from paths p
                  where p.path <= rp.path and
                        p.path > concat(rp.path, '(')
                 );
子查询可以使用索引。我不确定它是否会。

如果路径字段的值在您可以使用的两个表中相同:

SELECT * 
FROM Raw_Pages AS R
LEFT JOIN Paths AS P ON (R.path=P.path)
WHERE R.ID IS NULL
如果它仅与页面名称或路线的一部分匹配

SELECT * 
FROM Raw_Pages AS R
LEFT JOIN Paths AS P ON (R.path LIKE CONCAT('%',P.path,'%'))
WHERE R.ID IS NULL
为两个表中的路径字段编制索引是一种很好的做法,这样,如果可以使用的两个表中的路径字段值相同,则由于记录数的原因,查询速度会更快:

SELECT * 
FROM Raw_Pages AS R
LEFT JOIN Paths AS P ON (R.path=P.path)
WHERE R.ID IS NULL
如果它仅与页面名称或路线的一部分匹配

SELECT * 
FROM Raw_Pages AS R
LEFT JOIN Paths AS P ON (R.path LIKE CONCAT('%',P.path,'%'))
WHERE R.ID IS NULL

为两个表中的路径字段编制索引是一种很好的做法,这样由于记录的数量,查询速度会更快

您使用的是什么版本的MySQL?5.7.27-0ubuntu0.18.04.1您使用的是什么版本的MySQL?5.7.27-0ubuntu0.18.04.1