【问题标题】:Using something else than IN for subquery mysql对子查询mysql使用IN以外的东西
【发布时间】:2014-05-20 21:31:41
【问题描述】:

您好,我正在编写一个使用插入和更新的查询,更新有一个选择一个或多个行的子查询。 当我运行查询时,我收到以下错误:“#1235 - 此版本的 MySQL 尚不支持 'LIMIT & IN/ALL/ANY/SOME 子查询”

奇怪的是我用的是最新版本的mysql,而且这个功能从5.1开始就支持了。我的查询如下:

INSERT INTO Orders 
    (OrderID, Orderdate, Leverdate, status) 
    VALUES ('', now(), '2014-21-05', 'In      Behandeling');

UPDATE Dozen SET OrderID = LAST_INSERT_ID() 
    WHERE OrderID IN (SELECT DoosID FROM Dozen Limit 0,3);

如何将此查询重写为 mysql 可以理解和执行的内容?

提前致谢!

【问题讨论】:

  • 为什么不能把IN改成=,因为子查询只返回1个结果?
  • 正如@pascalvgemert 所说,没有理由使用 IN 因为你只返回一行和一列
  • 这一行只是一个例子,可能不好但没关系。在我的 php 版本中,“1”是一个变量

标签: php mysql sql


【解决方案1】:

使用INNER JOIN

UPDATE Dozen 
INNER JOIN Orders ON DoosID = OrderID
SET Dozen.OrderID = LAST_INSERT_ID()

或将 IN 更改为 =,因为您的子查询无论如何都会返回 1 条记录。

UPDATE Dozen 
SET OrderID = LAST_INSERT_ID()
WHERE OrderID = (SELECT DoosID FROM Dozen LIMIT 1)

【讨论】:

  • 这真的很接近,我会选择你的第一个选项,因为 LIMIT 并不总是 1。问题是 ON 子句。在我的设计中,DoosID 没有存储在 Orders 表中,因为如果一个订单 ID 有多个 DoosID,那么您的表中将有重复的数据。我不能有多个具有相同 orderID 的行
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2012-03-03
  • 2015-04-02
相关资源
最近更新 更多