两个select的Mysql连接

标签 mysql sql

我有一个表(列表),其中包含名称列表,第二个表(rec),其中包含第一个表中引用 id 的价格记录。

第二个表(rec)标题如下所示:

price|fk_id|what

我尝试计算第一个表中所有名称的价格总和,但除以列内容。可能包含什么:修理和购买 例如:

NAME |REPAIR|BUY
----------------
Name1|   120|340
Name2|    20|40

我知道创建 sql 来修复:

SELECT z.name, COALESCE(SUM(zb.price), 0) AS REPAIR FROM list z
LEFT JOIN rec zb ON zb.fk_id = z.id AND zb.what = "repair" 
GROUP BY z.id
ORDER BY z.id

如何连接第二列“购买”? 我尝试:

SELECT z.name, COALESCE(SUM(zb.price), 0) AS REPAIR, col2.BUY FROM list z
JOIN (
...The same select with zb.what = buy..
) as col2
LEFT JOIN rec zb ON zb.fk_id = z.id AND zb.what = "repair" 
GROUP BY z.id
ORDER BY z.id

但它无法正常工作。

最佳答案

您无法连接仅位于子查询中的表和列。您必须更改子查询,以便它也返回 z.id,然后加入 ON zb.fk_id = col2.id。但您不需要子查询,您可以在一个查询中完成所有操作:

SELECT z.name, 
        COALESCE(SUM(IF(zb.what = "repair", zb.price, 0)), 0) AS repair,
        COALESCE(SUM(IF(zb.what = "buy", zb.price, 0)), 0) AS buy
FROM list AS z
LEFT JOIN rec AS zb ON zb.fk_id = z.id
GROUP BY z.id
ORDER BY z.id

关于两个select的Mysql连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25190010/

相关文章:

mysql - 查找具有共同属性的重复项

php - 此代码是否循环遍历 MySQL 返回的多行?

mysql - 空表重复条目 '1' 键 'PRIMARY'

MySql子查询2个表

sql - 如何使用 SQL Order By 语句对结果进行不区分大小写的排序?

mysql - 与其他字段随机顺序的行号

php - 如何从 MySQL 表中对大型多维数组进行排序

mysql - 是否可以优化这个MySql查询

php - 使用 PDO 创建 session

php - 将数据添加到表形式 sql 并存储回新数据库