2010-09-13 8 views
1

J'utilise MySQL 5.1. J'ai deux tables T1 (hachage, valeur) et T2 (hachage, valeur) et je les relie en utilisant hash. Ils contiennent:Pour chaque ligne d'une table seulement une ligne d'une autre table (mysql)

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

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

Mon but est d'obtenir toutes les lignes de T1 qui a une connexion avec les lignes de T2.

J'ai essayé de le faire avec:

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

Mais j'échoué avec deux « A » de T1 en une sortie. Où ai-je tort?

Répondre

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

Si vous voulez utiliser un REJOIGNEZ il devrait être

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

Dans SQL Server le premier est plus efficace. Je ne sais pas pour MySQL cependant.

+0

J'ai accepté cette solution car il est possible d'utiliser la deuxième expression dans l'instruction DELETE et cela me convient. –

2
SELECT T1.* 
    FROM T1 
WHERE EXISTS (SELECT T2.hash 
        FROM T2 
       WHERE T2.hash = T1.hash 
      ) 
Questions connexes