MySQL:子查询多列

问题描述 投票:0回答:1

我有一些表格叫做 orders & notifications. 当管理员更新任何订单状态时,那么它将被存储在 notifications 桌子和 orders 桌子的 updated_at 的值被更新(显示在顶部)。

这是我的表格。

orders:
id, order_number, ..., updated_at

notifications:
id, order_id, order_status, remarks 

orders 我需要在页面上显示最新的订单。order_status & remarks.

SELECT
    `orders`.`token`,
    `orders`.`order_number`,
    `orders`.`order_date`, (
        SELECT SUM(`mrp` * `quantity`) FROM `order_items`
        WHERE `order_id` = `orders`.`id`
    ) AS `total`, (
        SELECT `order_status` FROM `notifications`
        WHERE `order_id` = `orders`.`id`
        ORDER BY `id` DESC
        LIMIT 0, 1
    ) AS `status`
FROM `orders`
WHERE `orders`.`company_id` = 1
AND `orders`.`user_id` = 5
GROUP BY `orders`.`id`
ORDER BY `orders`.`updated_at` DESC

sub-query 只能返回1列。有没有办法让 order_stat &amp。remarks 在单个查询中。我的意思是不添加任何其他子查询或在循环中打另一个查询。

mysql subquery multiple-columns
1个回答
0
投票

单个子查询可以用JOIN这样的方式。

SELECT
    `orders`.`token`,
    `orders`.`order_number`,
    `orders`.`order_date`,
    (
        SELECT SUM(`mrp` * `quantity`)
        FROM `order_items`
        WHERE `order_id` = `orders`.`id`
    ) AS `total`,
    `notifications`.`order_status`,
    `notifications`.`remarks`,
FROM `orders`
LEFT JOIN `notifications` ON `notifications`.`id`=(SELECT MAX(`id`) FROM `notifications` WHERE `order_id`=`orders`.`id`)
WHERE `orders`.`company_id` = 1
    AND `orders`.`user_id` = 5
GROUP BY `orders`.`id`
ORDER BY `orders`.`updated_at` DESC

但说实话,我不知道它的性能是否更好。我建议使用以下两个版本进行调试 EXPLAIN

© www.soinside.com 2019 - 2024. All rights reserved.