2011-01-19 93 views
0

我有3个表,但我只能加入另一个表计数。见下文。 下面的工作就像一个魅力,但我需要从另一个表中添加另一个“计数”。双连接mysql查询

有一个名为“ci_nomatch”第三表,并包含一个参考ci_address_book.reference 可能有多个条目(很多很多),但我只需要该表的计数。

所以如果ci_address_book将有项叫 “物品1”, “项目2”, “项目3” 和ci_nomatch将产生 “1,物品1,用户1”, “2,物品1,USER4”

我会喜欢在查询中为Item1返回“2”。

任何想法?我尝试了另一个连接,但它告诉我该引用不存在,而它的确存在!

SELECT c.*, IFNULL(p.total, 0) AS matchcount 
FROM ci_address_book c 
LEFT JOIN (
    SELECT addressbook_id, COUNT(match_id) AS total 
    FROM ci_matched_sanctions 
    GROUP BY addressbook_id 
) AS p 
ON c.id=p.addressbook_id 
ORDER BY matchcount DESC 
LIMIT 0,15 
+0

显示第二次连接的代码不起作用,我们将尝试为您进行调试。 – 2011-01-19 10:22:36

回答

1

你可以在选择

SELECT c.*, IFNULL(p.total, 0) AS matchcount, 
    (SELECT COUNT(*) FROM ci_nomatch n on n.reference = c.reference) AS othercount 
FROM ci_address_book c 
LEFT JOIN (
    SELECT addressbook_id, COUNT(match_id) AS total 
    FROM ci_matched_sanctions 
    GROUP BY addressbook_id 
) AS p 
ON c.id=p.addressbook_id 
ORDER BY matchcount DESC 
LIMIT 0,15 

@updated征求意见直接子查询它。包括一个额外的列“(matchcount - othercount)AS扣除”最好通过子查询完成。

SELECT *, matchcount - othercount AS deducted 
FROM 
(
    SELECT c.* , IFNULL(p.total, 0) AS matchcount, (
     SELECT COUNT(*) FROM ci_falsepositives n 
     WHERE n.addressbook_id = c.reference) AS othercount 
    FROM ci_address_book c 
    LEFT JOIN (
     SELECT addressbook_id, COUNT(match_id) AS total 
     FROM ci_matched_sanctions GROUP BY addressbook_id) AS p 
     ON c.id = p.addressbook_id ORDER BY matchcount DESC LIMIT 0 , 15 
) S 
+0

它给了我一个错误“on n.reference = c.reference” – renevdkooi 2011-01-19 10:33:33