MySQL备用行选择

时间:2009-07-10 10:34:46

标签: mysql

假设我有两张表中的数据。在一个我有订单ID和订单日期。在另一个我有订单ID,描述和价值。我知道如何做简单的SELECT,但我会用什么来输出这样的东西?

Order ID | Order Date | Description                     | Value
1234     | 10/07/2009 |                                 |
         |            | Orderline description goes here | 53.49
         |            | Orderline description goes here | 25.63
         |            | Orderline description goes here | 21.64
12345    | 11/07/2009 |                                 |
         |            | Orderline description goes here | 12.37
         |            | Orderline description goes here | 13.86
         |            | Orderline description goes here | 17.79

5 个答案:

答案 0 :(得分:4)

我会使用常规连接,省略重复值和分组可以处理表示层(例如GUI)。

答案 1 :(得分:0)

假设您在ORDER_ID字段....上保持TABLE1和TABLE2之间的外键约束。

SELECT t1.ORDER_ID as [ORDER ID],
       t1.ORDER_DATE as [ORDER DATE],
       t2.DESCRIPTION,
       t2.VALUE
FROM 
       TABLE1 t1 INNER JOIN TABLE2 t2 ON
              t1.ORDER_ID = t2.ORDER_ID

然后在GUI上忽略重复值......

或者你可以服用UNIONS ......

SELECT ORDER_ID as [ORDER ID],
       ORDER_DATE as [ORDER DATE],
       NULL as DESCRIPTION,
       NULL as VALUE
FROM TABLE1
     ORDER BY ORDER_ID

UNION ALL

SELECT NULL as [ORDER ID],
       NULL as [ORDER DATE],
       DESCRIPTION,
       VALUE
FROM TABLE2
     ORDER BY ORDER_ID

但你仍然需要在GUI上做一些事情。

答案 2 :(得分:0)

假设table1,table2是表。你可以做到

select OrderId, OrderDate, Description, Value from Table1,Table2 where Table1.OrderId = Table2.OrderId

OrderId用于匹配where子句中两个表中的记录。

答案 3 :(得分:0)

根据Josef的回答,以下查询可作为您解决方案的基础:

SELECT `Order Id`, `Order Data`, `Description`, `Value` FROM `OrderHeader` INNER JOIN `OrderItem` ON `OrderHeader`.`Order Id` = `OrderItem`.`Order Id` ORDER BY `Order Id`

(其中OrderHeader被假定为您的第一个表的名称,而OrderItem被假定为您的第二个表的名称)。按订单ID排序会将来自同一订单的行组合在一起。正如Josef所说,演示文稿的其余部分将取决于应用程序。

答案 4 :(得分:0)

这真的应该在客户端完成,但这是可能的解决方案:

SELECT  IF(od.order_id > 0, NULL, o.order_id),
        IF(od.order_id > 0, NULL, o.order_date),
        od.description, od.value
FROM    order o
JOIN    order_data od
ON      od.order_id = o.order_id
GROUP BY
        o.order_id, od.order_data_id WITH ROLLUP