如何在mysql中比较同一数据库中的两个表?

时间:2013-05-24 06:11:48

标签: mysql sql

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

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

2 个答案:

答案 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;

An SQLfiddle to test with

请注意,此搜索不能很好地处理索引,并且在渲染网页时不应该做任何事情。如果这是您经常需要做的事情,您可能希望在数据库中创建相对路径,并且只在需要访问文件时添加绝对路径部分。