簡體   English   中英

MYSQL-錯誤#1054

[英]MYSQL- Error #1054

插入之前鏈接中提到的編碼后,我注意到ORDER表中Total_Price中的某些值仍為零。 這可能是因為DRINK_ORDER表的Total_Price有一些值可能為null。 我嘗試使用下面提到的編碼,它在'where子句'中給了我“#1054 - 未知列'FOOD_ORDER.Order_ID'”。 誰能幫幫我嗎?

順便說一下ORDER .Total_Price = FOOD_ORDER總價+ DRINKS_ORDER .Total_PRICE(這是供參考)

Food_Order表

Drink_Order表

訂單表

之前的工作

UPDATE `ORDER`
    SET Total_Price = SUM (food_order.Total_Price)  
    WHERE FOOD_ORDER.Order_ID =`ORDER`.Order_ID
    AND `ORDER`.Total_Price = 0;

架構:

create table `order` -- not a great name by the way
(   Order_Id int auto_increment primary key,
    Total_Price decimal (10,2) not null
);

create table food_order
(   id int auto_increment primary key,
    Order_Id int not null,
    Total_Price decimal(10,2) not null, -- line item total price
    key(Order_Id), -- make it fast
    -- FK below
    CONSTRAINT fk_fo_toOrder FOREIGN KEY (Order_Id) REFERENCES `order`(Order_Id) 
);

create table drink_order
(   id int auto_increment primary key,
    Order_Id int not null,
    Total_Price decimal(10,2) not null, -- line item total price
    key(Order_Id), -- make it fast
    -- FK below
    CONSTRAINT fk_do_toOrder FOREIGN KEY (Order_Id) REFERENCES `order`(Order_Id) 
);

insert `order`(total_price) values (0),(0),(0); -- 3 orders
insert food_order(Order_Id,Total_Price) values (1,1.11),(1,2.22),(1,4.44),(2,20),(2,11.11);
insert drink_order(Order_Id,Total_Price) values (2,22.22),(2,33.33),(3,1000),(3,2000);

查詢(由Order_Id單獨運行)

update `Order`
join
(
select o.Order_Id,food.foodSum,drinks.drinkSum
from `order` o
cross join
( select ifnull(sum(Total_Price),0) as foodSum
  from food_order
  where Order_Id=1
) food
cross join 
( select ifnull(sum(Total_Price),0) as drinkSum
  from drink_order
  where Order_Id=1
) drinks
where o.Order_id=1
) inr
on inr.Order_id=`Order`.Order_Id
set `Order`.Total_Price=(inr.foodSum+inr.drinkSum);

結果:

select * from `order`;
+----------+-------------+
| Order_Id | Total_Price |
+----------+-------------+
|        1 |        7.77 |
|        2 |       86.66 |
|        3 |     3000.00 |
+----------+-------------+

注意,Order_Id可以放在准備好的語句中,或者存儲過程可以接受參數,並以這種方式楔入它。

cross join指定沒有連接子句。 通常被認為是cartesian product ,但在這種情況下1 * 1 * 1 = 1行。

所以它是一個join with update patternjoin with update pattern ,對着1行。

至於數據,訂單1沒有飲料,訂單3沒有食物,訂單2都沒有。 我認為訂單3有很多樂趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM