【问题标题】:MySQL: sub query multiple columnsMySQL:子查询多列
【发布时间】:2020-06-07 13:24:00
【问题描述】:

我有名为ordersnotifications 的表。当管理员更新任何订单状态时,它会存储在notifications 表中,并且orders 表的updated_at 值会更新(显示在顶部)。

这是我的桌子:

orders:
id, order_number, ..., updated_at

notifications:
id, order_id, order_status, remarks 

orders 页面上,我需要显示最新的order_statusremarks 的订单。

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_statremarks。我的意思是不添加任何其他子查询或在循环中点击另一个查询。?

【问题讨论】:

    标签: mysql subquery multiple-columns


    【解决方案1】:

    单个子查询可以像这样在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 调试这两个版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多