假设我有两张表中的数据。在一个我有订单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
答案 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