Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双连接mysql查询_Sql_Mysql - Fatal编程技术网

双连接mysql查询

双连接mysql查询,sql,mysql,Sql,Mysql,我有3个表,但我只能加入另一个表计数。见下文。 下面的一个很有魅力,但我需要从另一个表中添加另一个计数 第三个表名为ci_nomatch,包含对ci_address_book.reference的引用 它可能有多个条目,但我只需要该表的计数 所以如果ci_address_book有一个名为item1,item2,item3的条目 ci_nomatch将有1,item1,user1,2,item1,user4 我想为查询中的Item1返回2 有什么想法吗?我尝试了另一个连接,但它告诉我引用不存在,

我有3个表,但我只能加入另一个表计数。见下文。 下面的一个很有魅力,但我需要从另一个表中添加另一个计数

第三个表名为ci_nomatch,包含对ci_address_book.reference的引用 它可能有多个条目,但我只需要该表的计数

所以如果ci_address_book有一个名为item1,item2,item3的条目 ci_nomatch将有1,item1,user1,2,item1,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

您可以在select中直接子查询它

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
@更新以供评论。包括一个额外的列matchcount-othercount作为扣除,最好通过子查询来完成

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

显示第二个连接不起作用的代码,我们将尝试为您调试。[第三个表名为ci_nomatch,包含对ci_address_book.reference的引用]-ci_nomatch中的哪个字段连接到book.reference?我发现它起作用:选择c.*,如果p.total为null,0为matchcount,则从ci_误报n中选择COUNT*n其中n.addressbook_id=c。引用为其他计数从ci_address_book c左加入选择addressbook_id,按c.id=p.addressbook_id按matchcount DESC LIMIT 0,15从ci_matched_制裁组按addressbook_id作为p计算matched总数,是否有可能再产生一个结果,即:matchcount-othercount作为扣除的结果?顺便问一下。。。是的,我知道n.addressbook\u id会让人认为它想删除表addressbook的id字段,但实际上它是addressbook的引用字段,我认为注释被截断了?