2013-03-13 4 views
1

Bonjour J'ai une table tbl_relations qui ressemble àmysql joindre deux colonnes d'une table

----------------------------------- 
| id | source_id | target_id | 
----------------------------------- 
| 2 | 2   | 4   | 
----------------------------------- 
| 3 | 5   | 7   | 
----------------------------------- 
| 4 | 7   | 4   | 
----------------------------------- 

Et autre table tbl_looksup qui ressemble à

------------------------------ 
| id | language | value | 
------------------------------ 
| 1 | 1   | abc | 
------------------------------ 
| 1 | 2   | abc | 
------------------------------ 
| 2 | 1   | abc | 
------------------------------- 
| 2 | 2   | abc | 
------------------------------- 
| 5 | 1   | abc | 
------------------------------- 
| 5 | 2   | abc | 
------------------------------- 
| 7 | 1   | abc | 
------------------------------- 
| 7 | 1   | abc | 
------------------------------- 

tbl_relations est mis en correspondance avec tbl_looksup de telle manière que tbl_relations.source_id et tbl_relations.target_id est le id of tbl_looksup

Mon problème J'ai besoin de trouver ces enregistrements dans tbl_relations whoes source_id ou target_id n'est pas présent dans tbl_looksup. Cela signifie qu'il n'y a pas id existe dans tbl_looksup. Dans plus de détails le premier enregistrement de tbl_relations a target_id = 4 qui n'existe pas dans tbl_looksup. C'est un enregistrement défectueux. J'ai besoin de trouver ces enregistrements.

Ce que je l'ai fait jusqu'à présent

SELECT 
    tbl_relations.source_id, 
    tbl_relations.target_id, 
    tbl_relations.id, 
    tbl_looksup.`id` AS tblid 
FROM 
    tbl_relations 
    LEFT JOIN tbl_looksup 
    ON tbl_relations.`source_id` != tbl_looksup.`id` 
    OR tbl_relations.`target_id` != tbl_looksup.`id` 
GROUP BY tbl_relations.id 

Répondre

2

Afin d'obtenir le résultat souhaité, vous devez joindre tbl_looksup deux fois car il y a deux colonnes qui dépend de cette table.

SELECT DISTINCT a.* 
FROM tbl_relations a 
     LEFT JOIN tbl_looksup b 
      ON a.source_id = b.id 
     LEFT JOIN tbl_looksup c 
      ON a.target_id = c.id 
WHERE b.id IS NULL OR 
     c.id IS NULL 

Pour obtenir plus plus de connaissances sur les jointures, veuillez consulter le lien ci-dessous:

SORTIE

╔════╦═══════════╦═══════════╗ 
║ ID ║ SOURCE_ID ║ TARGET_ID ║ 
╠════╬═══════════╬═══════════╣ 
║ 2 ║   2 ║   4 ║ 
║ 4 ║   7 ║   4 ║ 
╚════╩═══════════╩═══════════╝ 
+1

+1 En regardant votre vitesse, vous devriez être banni pendant cinq premières minutes pour répondre à toute question. : D – hims056

+1

@ hims056 Non! 'O_o' S'il vous plaît ne pas': D' hehe –

+0

@JW. C'est exceptionnel. Merci mec –

0
SELECT 
    tbl_relations.source_id, 
    tbl_relations.target_id, 
    tbl_relations.id 
FROM 
    tbl_relations 
    WHERE tbl_relations.source_id not in (select id from tbl_looksup) 
     OR tbl_relations.target_id not in (select id from tbl_looksup) 
0

Essayez d'ajouter ceci:

OÙ tbl_relations. target_id IS NULL

0
SELECT tbl_relations.id FROM tbl_relations 
    LEFT JOIN tbl_looksup 
    ON tbl_looksup.id = tbl_relations.source_id OR tbl_looksup.id = tbl_relations.target_id 
    WHERE tbl_looksup.id IS NULL