2016-09-15 42 views
0

我是SQL中的新成员。我想有它返回的共同点具有相同多列的SQL搜索值

多个列的值我有一个查询t_table有:

  filename    | start   | stop 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 
AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 

我想与开始返回文件名和停止列共同点,名字就像' %AAAA%'(2第一行) CCCC%具有相同的开始和停止,但名称不同于'%AAAA%

我试过这些答案Find rows that have the same value on a column in MySQL但我无法得到预期的结果。附:

SELECT filename , 
     start 
FROM t_table 
WHERE (start IN (SELECT start 
        FROM t_table 
        GROUP BY start 
        HAVING COUNT(*) > 1)) 
     AND (filename LIKE '%AAAA%'); 

我获得所有的人......

  filename    | start   | stop 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 
AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 

相反的:

  filename    | start   | stop 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 
AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB | 2016-12-24 00:00:00 | 2016-01-03 00:00:00 

你能帮帮我吗?

+2

你应该表现出与预期输出以及更多的样本数据,但在任何情况下,我尝试下面的答案。 –

+0

一个冗长乏味的文件名有助于解释问题吗? – Strawberry

回答

3
SELECT t1.filename, 
     t1.start, 
     t1.stop 
FROM t_table t1 
INNER JOIN 
(
    SELECT start, stop   -- this subquery identifies all start, stop 
    FROM t_table     -- pairs for which 2 or more records share 
    GROUP BY start, stop   -- those values 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.start = t2.start AND 
     t1.stop = t2.stop 
WHERE t1.filename LIKE '%AAAA%' -- filename contains 'AAAA' 

演示在这里:

SQLFiddle

+0

谢谢,但我仍然有他们三个... – ali

+0

@ali请检查小提琴。我只从我的查询中得到两条记录,而不是三条。 –

+0

你是对的。谢谢 :) – ali