Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 在一个结果集中的不同行上多次联接表_Mysql_Group By_Outer Join - Fatal编程技术网

Mysql 在一个结果集中的不同行上多次联接表

Mysql 在一个结果集中的不同行上多次联接表,mysql,group-by,outer-join,Mysql,Group By,Outer Join,所以我有两张表(简化如下) 我需要像这样展示这些: member id | name | doc 1 expiry | doc 2 expiry | doc 3 expiry -------------------------------------------------------------- 1 | AAA | 1234567890 | 1234567891 | 1234567892 2 | BBB | 1234567893 | 1234

所以我有两张表(简化如下)

我需要像这样展示这些:

member id | name | doc 1 expiry | doc 2 expiry | doc 3 expiry 
--------------------------------------------------------------
1         | AAA  | 1234567890   | 1234567891   | 1234567892
2         | BBB  | 1234567893   | 1234567894   | 1234567895
我尝试过使用多个外部联接和别名进行查询,但它只是重复文档到期时间戳。这就是我到目前为止所做的:

    SELECT DISTINCT `members`.`id`, `members`.`name`, `a`.`expiry` AS `expiry1`, `b`.`expiry` AS `expiry2`, `c`.`expiry` AS `expiry3` 
    FROM `members` 
    LEFT OUTER JOIN `documents` a ON `a`.`member_id` = `members`.`id` 
    LEFT OUTER JOIN `documents` b ON `b`.`member_id` = `members`.`id` 
    LEFT OUTER JOIN `documents` c ON `c`.`member_id` = `members`.`id` 
    GROUP BY `members`.`id`
人们需要能够搜索此文档,例如列出文档类型3已过期的所有人。

试试看

SELECT 
    a.id AS 'member id',
    a.name
    SUM(a.d1exp) AS 'doc 1 expiry',
    SUM(a.d2exp) AS 'doc 2 expiry',
    SUM(a.d3exp) AS 'doc 3 expiry'
FROM
    (
        SELECT 
            aa.id,
            aa.name,
            COALESCE(d1.expiry, 0) AS d1exp,
            COALESCE(d2.expiry, 0) AS d2exp,
            COALESCE(d3.expiry, 0) AS d3exp
        FROM
            members aa
        LEFT JOIN
            documents d1 ON aa.id = d1.member_id AND d1.type = 1
        LEFT JOIN
            documents d2 ON aa.id = d2.member_id AND d2.type = 2
        LEFT JOIN
            documents d3 ON aa.id = d3.member_id AND d3.type = 3
    ) a
GROUP BY
    a.id,
    a.name

这是假设“到期”字段中的值是数字。

谢谢!我不太清楚那里发生了什么,所以我要好好读一读,但它成功了!
SELECT 
    a.id AS 'member id',
    a.name
    SUM(a.d1exp) AS 'doc 1 expiry',
    SUM(a.d2exp) AS 'doc 2 expiry',
    SUM(a.d3exp) AS 'doc 3 expiry'
FROM
    (
        SELECT 
            aa.id,
            aa.name,
            COALESCE(d1.expiry, 0) AS d1exp,
            COALESCE(d2.expiry, 0) AS d2exp,
            COALESCE(d3.expiry, 0) AS d3exp
        FROM
            members aa
        LEFT JOIN
            documents d1 ON aa.id = d1.member_id AND d1.type = 1
        LEFT JOIN
            documents d2 ON aa.id = d2.member_id AND d2.type = 2
        LEFT JOIN
            documents d3 ON aa.id = d3.member_id AND d3.type = 3
    ) a
GROUP BY
    a.id,
    a.name