如何正确使用INSERT INTO SELECT?

时间:2012-10-18 20:51:16

标签: mysql

我正在尝试将其他表中的记录插入store_orders_items。 例如:

INSERT INTO store_orders_items( order_id, sel_item_id, sel_item_price)
  SELECT order_id, sel_item_id, sel_item_price
      FROM orders_ids 
      INNER JOIN store_orders ON store_orders.id = orders_ids.order_id
      INNER JOIN store_shoppertrack ON  store_items.id=store_shoppertrack.sel_item_id
      Where session_id = '".$_COOKIE["PHPSESSID"]."';

然后我收到以下消息:'字段列表'中的未知列'sel_item_price'。我试图将sel_item_price设置为item_price无济于事。 这是我的表格:

store_orders_items:

id| order_id | sel_item_id |sel_item_price|  
-------------------------------------------        
  |          |             |              |

store_shoppertrack:

id| session_id | sel_item_id |date_added|  
-------------------------------------------        
  |            |             |          |

store_orders:

id| item_total| order_date| 
---------------------------       
  |            |          |

store_items:

id| item_price| item_color|  
---------------------------       
  |           |           |  

orders_ids:

id| order_id | status|  
----------------------       
  |          |       |   

5 个答案:

答案 0 :(得分:2)

jour join中没有表,其中包含名为sel_item_price的列,也不包含列item_priceINSERT INTO与此无关,SELECT本身也会失败。我假设您也想加入store_items表,并从该表中选择item_price列,以便插入sel_item_price store_order_items表。您可以像这样重写SELECT

SELECT order_id, store_shoppertrack.sel_item_id, store_items.item_price AS sel_item_price
  FROM orders_ids 
  INNER JOIN store_orders ON store_orders.id = orders_ids.order_id
  INNER JOIN store_items ON store_items.id = store_orders.sel_item_id
  INNER JOIN store_shoppertrack ON  store_items.id=store_shoppertrack.sel_item_id
  Where session_id = 'foo';

AS sel_item_price是可选的,因为您已在INSERT INTO部分中指定了目标列。但它可能有助于一致性,因为SELECT的输出现在将标记与目标表的标记相同的列。并且它表明你在问题中得到了AS错误的顺序,所以你可能会在这里学到一些东西。

我为您的架构和查询创建了SQL Fiddle

答案 1 :(得分:1)

字段sel_item_price仅在您的store_orders_items表中,而不是您的选择查询的一部分。这是您列出的错误的原因。

答案 2 :(得分:0)

根据此表,唯一的字段sel_item_price位于表store_orders_items中,这是您要插入数据的表。这就是为什么你得到错误。

答案 3 :(得分:0)

您的查询应该是,您使用的是store_items别名,但它不在您的加入

INSERT INTO store_orders_items( order_id, sel_item_id, sel_item_price)
  SELECT order_id, sel_item_id, sel_item_price
      FROM orders_ids 
      INNER JOIN store_orders ON store_orders.id = orders_ids.order_id
      INNER JOIN store_order_items 
                  ON store_orders.id = store_order_items.order_id --missing
      INNER JOIN store_shoppertrack 
                  ON store_items.id=store_shoppertrack.sel_item_id
      Where session_id = '".$_COOKIE["PHPSESSID"]."';

答案 4 :(得分:0)

您还需要加入store_items,并在item_price中的此表格中添加SELECT列,而不是store_item_price,这只列在您要插入的表格中成