我是新来的MYSQL查询。我在同一个数据库中有两个不同的表。每个表只有3列。我想比较第一张桌子的第二张桌子。
表1:
path -> C:/sume/sorve/data001/data001.jpg
frn -> 256423
byte -> 153
table 2:
path -> C:/ones/elsa/data001/data001.jpg
frn -> 256423
byte -> 153
我需要匹配(data001 / data001.jpg,256423,153),我该怎么做?因为某些data001子目录之前总是来不同的目录。
哪些记录与第二张表不匹配,我需要记录..
答案 0 :(得分:0)
试试这个
select t1.* from table1 t1
left join table2 t2 on
substring_index(t2.path, '/', -1) = substring_index(t1.path, '/', -1)
and t2.frn = t1.frn
and t2.byte = t1.byte
where t2.path is null or t2.frn is null or t2.byte is null
为路径编辑。现在检查它是否应该起作用
答案 1 :(得分:0)
如果路径是静态的(即每个表中的所有条目都相同),您只需将该部分替换为空字符串作为普通LEFT JOIN
的一部分;
SELECT t1.*
FROM Table1 t1
LEFT JOIN Table2 t2
ON REPLACE(t1.`path`, 'C:/sume/sorve/', '') =
REPLACE(t2.`path`, 'C:/ones/elsa/', '')
AND t1.`frn` = t2.`frn`
AND t1.`byte` = t2.`byte`
WHERE t2.`path` IS NULL;
请注意,此搜索不能很好地处理索引,并且在渲染网页时不应该做任何事情。如果这是您经常需要做的事情,您可能希望在数据库中创建相对路径,并且只在需要访问文件时添加绝对路径部分。