0

我是 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 子目录总是来自不同的目录。

哪些记录与第二张表不匹配,我需要那些记录..

4

2 回答 2

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

编辑路径。现在检查它应该工作

于 2013-05-24T06:16:51.527 回答
0

如果路径是静态的(即每个表中的所有条目都相同),则可以将该部分替换为空字符串作为 normal 的一部分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;

一个用于测试的 SQLfiddle

请注意,此搜索不适用于 index,并且对于呈现网页而言,您不应该做任何事情。如果这是您经常需要做的事情,您可能希望使数据库中的路径相对,并且仅在需要访问文件时添加绝对路径部分。

于 2013-05-24T06:20:33.963 回答