2016-04-27 70 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