选择复杂查询到现有列

时间:2013-10-19 16:31:17

标签: mysql sql

我有一张表,其中一列非常依赖于其他一些表

我无法更改表格,我无法更改所用参数的名称

这是我的疑问:

select *,(select sum(itemQuantity*(select itemPrice from Items where 
Items.itemID=OrderItems.itemID)) from OrderItems 
where OrderItems.orderNumber=Orders.orderNumber) as orderValue,
(select sum(itemQuantity) from OrderItems where OrderItems.orderNumber=Orders.orderNumber)
as orderItemQuantity from Orders  WHERE Orders.customerId =1 AND Orders.beenSupplied =1

这是此查询的结果:

enter image description here

如你所见,我有两次“orderValue”列 第一个orderValue是Orders表中的原始列,第二个orderValue来自查询中的“as”子句

如何合并两列并在其中输出查询,而不是经常插入的0?

编辑: 表结构: enter image description here enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

不是使用SELECT *,而是明确列出您希望选择的列(来自您的Orders表)。

您还可以通过连接最外层查询中的表然后对每个订单进行分组来避免使用(效率极低)相关子查询。

SELECT   Orders.orderNumber,
         Orders.customerId,
         Orders.orderDate,
         Orders.beenSupplied,
         Orders.purchaseDate,
         SUM(OrderItems.itemQuantity * Items.itemPrice) AS orderValue,
         SUM(OrderItems.itemQuantity)                   AS orderItemQuantity
FROM     Orders
    JOIN OrderItems USING (orderNumber)
    JOIN Items      USING (itemID)
WHERE    Orders.customerId   = 1
     AND Orders.beenSupplied = 1
GROUP BY Orders.orderNumber