2011-11-17 80 views
0

一個字段我有這樣的查詢:JOIN上一個表,其中不等於一個值

SELECT `A`.*, `LNK`.`act_id`, `LNK`.`remaining`, `U`.`username` as U_username 
FROM (`anagrafiche` as A) 
LEFT JOIN `lnk_ana-act` AS LNK ON `A`.`id` = `LNK`.`ana_id` 
LEFT JOIN `users` AS U ON `A`.`uid` = `U`.`id` 
WHERE (`LNK`.`act_id` != 57 OR `LNK`.`act_id` IS NULL) AND A.closed = '0' 
LIMIT 10 

此查詢選擇的所有字段,其中act_id不是57,導致在第一個表「anagrafiche」的幾個重複。這樣做顯然是錯誤的,在這種情況下我應該怎麼做?

謝謝

編輯澄清。

無論有多少個lnk_ana-act記錄,我只需要第一個表的一條記錄。更準確地說,有數千個記錄lnk_ana-act表不等於act_id!= 57,但我只需要一個「anagrafiche」表的唯一記錄,無論連接表中有多少記錄

+0

你的預期結果是什麼?你想獲得哪些記錄? – Marco

+0

這是使用LEFT加入的要求嗎?我的意思是你需要第一個表的行,即使他們的匹配行沒有在第二個表中找到? – Zohaib

+0

@Marco無論有多少個lnk_ana-act記錄,我只需要第一張表的一條記錄。 – 0plus1

回答

2

如果我明白你需要什麼。試試這個:

SELECT A.*, LNK.act_id, LNK.remaining, U.username as U_username 
FROM anagrafiche A LEFT JOIN lnk_ana-act LNK 
    ON A.id = LNK.ana_id 
LEFT JOIN users U 
    ON A.uid = U.id 
WHERE LNK.act_id <> 57 AND A.closed = '0' 
GROUP BY A.id 
LIMIT 10 
+0

你說得對,謝謝。 – 0plus1

相關問題