2013-03-13 31 views
1

你好,我有一個表tbl_relations,它看起來像MySQL的加入爲一個表的兩列

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

與其他表tbl_looksup它看起來像

------------------------------ 
| 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被映射到tbl_looksup以這樣的方式那tbl_relations.source_idtbl_relations.target_idid of tbl_looksup

我的問題 我需要找出那些tbl_relations who記錄source_idtarget_id不存在於tbl_looksup。這意味着tbl_looksup中不存在id。更詳細地說,tbl_relations的第一個記錄具有target_id = 4,其不存在於tbl_looksup中。這是錯誤的記錄。我需要找出這些記錄。

我至今

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 

回答

2

做是爲了得到你想要的結果,你需要加入tbl_looksup兩次,因爲有這取決於表兩列。

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 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

輸出

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

+1看你的速度,你應該禁止前五分鐘回答任何問題。 :D – hims056 2013-03-13 06:46:34

+1

@ hims056不! 'O_o'請不要':D' hehe – 2013-03-13 06:47:53

+0

@JW。它很出色。謝謝兄弟 – 2013-03-13 07:01:01

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

嘗試添加此:

WHERE 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