如何在MYSQL中使用选择子查询

时间:2012-07-31 20:14:56

标签: mysql subquery

我有两个数据库,我正试图在它们之间传输数据。

我现在正在努力从一个到另一个接到订单,但我遇到了一些我无法弄清楚正确方法的事情。

这是迄今为止的查询...

INSERT INTO `NEWTEST`.`Order_LineDetails`

( OrderLineItem_ID, Customer_ID, Order_ID )

SELECT

OrderDetailID,

(    
SELECT o.CustomerID
FROM `OLDTEST`.`Order_Details` od
JOIN `OLDTEST`.`Orders` o ON  o.OrderID = od.OrderID
),

OrderID

FROM `OLDTEST`.`Order_Details`

这将返回错误'#1242 - 子查询返回超过1行'。

我想要的结果就是......

OLDTEST.Order_Details           -> NEWTEST.Order_LineDetails
OLDTEST.Order.CustomerID        -> NEWTEST.Customer_ID
OLDTEST.Order_Details.OrderID   -> NEWTEST.Order_ID

我错过了什么?

::::::编辑:::::::

现在这是正确的,并且运行正常。

SELECT

  od.OrderDetailID,
  o.CustomerID,
  od.OrderID

FROM `OrderProcessing`.`Order_Details` od

JOIN `OrderProcessing`.`Orders` o ON o.OrderID = od.OrderID

LIMIT 100

2 个答案:

答案 0 :(得分:5)

当你在SELECT子句中使用子查询时,它必须返回一行,因此你得到的错误。

实际上你似乎不需要子查询:

INSERT INTO `NEWTEST`.`Order_LineDetails`
SELECT
    od.OrderDetailID,
    o.CustomerID,
    od.OrderID
FROM `OLDTEST`.`Order_Details` od
JOIN `OLDTEST`.`Orders` o ON  o.OrderID = od.OrderID

(在运行之前,请注释INSERT行,以确保它提供您期望的结果。

答案 1 :(得分:0)

MySQL子查询只能包含一个结果(显然你的子结果更多)。您可以添加限制来解决此问题:

SELECT o.CustomerID
FROM `OLDTEST`.`Order_Details` od
JOIN `OLDTEST`.`Orders` o ON  o.OrderID = od.OrderID LIMIT 1