2010-09-13 54 views
1

我使用MySQL 5.1。我有兩個表T1(散列值)和T2(散列值),我用hash連接它們。它們包含:對於一個表中的每一行只有另一個表中的一行(mysql)

---- 
T1 
---- 
1 A 
2 B 
3 C 
4 D 

---- 
T2 
---- 
1 E 
1 F 
3 G 
4 H 

我的目的是從T1中獲取與T2中的任何行有連接的所有行。

我試着這樣做:

SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.hash = T2.hash; 

但我有兩個「A」從T1的輸出失敗。我錯在哪裏?

回答

2
SELECT T1.hash, T1.value 
FROM T1 
WHERE EXISTS(
      SELECT * 
      FROM T2 
      WHERE T1.hash = T2.hash); 

如果你想使用JOIN這將需要

SELECT DISTINCT T1.hash, T1.value 
FROM T1 
INNER JOIN T2 ON T1.hash = T2.hash; 

在SQL Server中的第一個是更有效的。儘管我不知道MySQL。

+0

我接受了這個解決方案,因爲可以在DELETE語句中使用第二個表達式,這對我來說是非常好用的。 – 2010-09-15 11:30:59

2
SELECT T1.* 
    FROM T1 
WHERE EXISTS (SELECT T2.hash 
        FROM T2 
       WHERE T2.hash = T1.hash 
      ) 
相關問題