首页 > 解决方案 > 通过单个查询选择所有客户和所有订单

问题描述

有没有办法通过单个 mysql 查询来输出所有客户及其所有订单,包括没有订单的客户?我有:

顾客:

╔════╦═════════════╗
║ ID ║    NAME     ║
╠════╬═════════════╣
║  1 ║ John Smith  ║
║  2 ║ Jim Jimmers ║
╚════╩═════════════╝

订单:

╔═══════╦══════════╦═══════╗
║  id   ║ ClientID ║ Status║
╠═══════╬══════════╬═══════╣
║ 1     ║        1 ║  wait ║
║ 2     ║        1 ║  rdy  ║
╚═══════╩══════════╩═══════╝

如何选择如下结果:

╔════╦═════════════╦═════════════╦═════════════╗
║ ID ║    NAME     ║ Order Id    ║ Order Status║
╠════╬═════════════╬═════════════╬═════════════╣
║  1 ║ John Smith  ║           1 ║        wait ║
║  1 ║ John Smith  ║           2 ║        rdy  ║
║  2 ║ Jim Jimmers ║             ║             ║
╚════╩═════════════╩═════════════╩═════════════╝

标签: mysqlsql

解决方案


只需在两个表之间使用左连接:

SELECT c.ID, c.NAME, o.id AS OrderId, o.Status AS OrderStatus
FROM Customers c
LEFT JOIN Orders o
    ON o.ClientID = c.ID
ORDER BY c.ID, o.id;

推荐阅读