2011-11-17 137 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

相关问题