2014-09-05 28 views
0

我有一个名为broodjes-service数据库,每当我运行此查询它:DELETE语句犯规拿表名称是否正确

DELETE FROM order_items WHERE order_id = 42 

我得到这个错误:

#1146 Table 'broodjes-service.i' doesn't exist 

虽然我” m确定该表存在,使用此表结构:

enter image description here

问题

我想从一个名为order_items表中删除一行,但它需要的表名i出于某种原因。

问题

  • 为何需要表名i
  • 我怎样才能让这个我的查询将实际上从特定表中的一行?

我有triggers为表order_items

这一个是删除的东西时:

enter image description here

UPDATE orders o 
    INNER JOIN (SELECT i.order_id id, SUM(i.quantity * p.price) total_price 
     FROM `orders-items` i 

    INNER JOIN products p ON p.id = i.products_id 
     AND i.order_id = old.order_id) t ON t.id = o.id 

SET o.total_price = t.total_price 

插入扳机

enter image description here

INNER JOIN (SELECT i.order_id id, SUM(i.quantity * p.price) total_price 
FROM `orders-items` i 

INNER JOIN products p ON p.id = i.products_id AND i.order_id = new.order_id) t ON t.id = o.id 

SET o.total_price = t.total_price 

更新触发

enter image description here

UPDATE orders o INNER JOIN (SELECT i.order_id id, SUM(i.quantity * p.price) total_price FROM `orders-items` i INNER JOIN products p ON p.id = i.products_id AND i.order_id = new.order_id) t ON t.id = o.id SET o.total_price = t.total_price 
+1

有没有附加任何触发器? – MrTux 2014-09-05 10:04:03

+0

@MTTUX是的,我更新了我的问题 – Bas 2014-09-05 10:48:43

+0

尝试更新您的删除触发器,并使用表名称而不是定义的别名。表“订单项”是否存在? – MrTux 2014-09-05 14:31:35

回答

0
DELETE FROM `broodjes-service`.order_items 
WHERE order_id = 42 

如果使用别名,然后像这样

DELETE i 
FROM `broodjes-service`.order_items i 
WHERE order_id = 42 

不要混合数据库名和别名

DELETE `broodjes-service`.i 
FROM `broodjes-service`.order_items i 
WHERE order_id = 42 
+0

我更新了我的问题,我确实触发了它。一个用于删除,更新和插入。顺便说一句,当使用你的查询时,我得到这个错误:'#1064 - 你的SQL语法错误;检查对应于您的MySQL服务器版本的手册,以便在第1行'-service.order_items i WHERE order_id = 42'附近使用正确的语法。 – Bas 2014-09-05 10:45:31

+0

我更正了我的答案。您的触发代码与您的错误不符。它必须在其他地方 – 2014-09-05 10:57:00

+0

难道是因为我的数据库名称中有'-'?或者'order_items'中的'order'这个词已经被保留了或者什么? – Bas 2014-09-05 10:58:38

-1

尝试:

Use broodjes-service; 
DELETE FROM order_items WHERE order_id = 42