加入mysql表并获取所有记录,如果为空

时间:2015-07-31 05:58:29

标签: php mysql

我有3张桌子

venture - stores details about ventures
venture_buys - details about the venture purchases
users - details about the users

使用以下查询加入所有3个表并在块中显示详细信息

SELECT `a`.`user_id`, `a`.`g_id`,`b`.`first_name`, `b`.`last_name`,  `a`.`description`, `a`.`title`, `a`.`location`,b.title, sum(c.mt_qty) as m_qty
        FROM `users` `a`
        LEFT JOIN `venture` `b` ON `b`.`id`=`a`.`user_id`
        LEFT JOIN `venture_buys` `c` ON `c`.`g_id`=`a`.`g_id`
        ORDER BY `c`.`g_id` ASC

我拥有的问题是venture_buys只有在购买时才有详细信息,否则它总是空的。我使用该表来计算购买数量。当我尝试添加并展示企业时它不会显示记录,除非venture_buys有记录。

是否可以更改查询或写入条件以获取所有记录,即使在venture_buy中没有记录?

2 个答案:

答案 0 :(得分:2)

你可以试试这个,交配:

SELECT
    u.user_id, u.g_id,
    v.first_name, v.last_name,
    u.description, u.title, u.location,
    v.title, SUM(vb.mt_qty) AS m_qty
FROM
    venture v
    INNER JOIN users u ON u.id = v.id
    INNER JOIN venture_buys ON vb.g_id = u.g_id
GROUP BY
    vb.g_id
ORDER BY
    vb.g_id ASC; 

答案 1 :(得分:0)

对结构做出很多假设,也许这就是你想要做的事情:

SELECT `a`.`user_id`, `a`.`g_id`,`b`.`first_name`, `b`.`last_name`,  `a`.`description`, `a`.`title`, `a`.`location`,`b`.`title`, `c`.`sum_qty` as m_qty
        FROM `users` `a`
        LEFT JOIN `venture` `b` ON `b`.`id`=`a`.`user_id`
        LEFT JOIN (SELECT `g_id`,sum(`mt_qty`) AS `sum_qty` FROM `venture_buys` GROUP BY `g_id`) AS `c` ON `c`.`g_id`=`a`.`g_id`
        ORDER BY `c`.`g_id` ASC

不知道为什么我会跟踪这些不合逻辑的别名......