2016-04-27 77 views
0

假设我有此表"tab"SQL请求:加入同桌

------------------- 
id | value | name | 
------------------- 
1 | 12 | 'to' | 
------------------- 
2 | 13 | 'to' | 
------------------- 
3 | 14 | 'gh' | 
------------------- 

我想要得到的是具有相同的名称,但不同势值线。在这种情况下,这将是第一和第二行。 我做了这个请求:

select * 
from tab t1 
join tab t2 
on t1.ID = t2.ID 
where t1.VALUE != t2.VALUE 
and t1.NAME = t2.NAME 

但它采取的方式太长,给我的结果。 所以我想知道是否有另一个更快的解决方案?

谢谢!

+4

难道它甚至工作? '在t1.ID = t2._ID' – lad2025

+1

我会'在哪里t1.VALUE jarlh

+2

桌上有索引吗? –

回答

1

你可以试试这个解决方案,如果你不需要加入

SELECT * 
FROM tab t1 
WHERE EXISTS (SELECT 'x' 
       FROM tab t2 
       WHERE t2.id <> t1.id 
       AND t2.name = t1.name 
       AND t2.value <> t1.value 
      ) 
+0

这个效果更好!谢谢! – dardy

0

试试这个

select t1.* from your_table as t1 inner join 
(
select name from your_table 
group by name 
having count(distinct value)>1 
) as t2 on t1.name=t2.name 
+0

谢谢,但它不会返回任何结果... – dardy