我可以在SQL UPDATE内部使用内部SELECT吗?

时间:2009-04-22 17:21:08

标签: mysql sql sqlite sql-update

我有一个数据库,如:

foo包含id列和name列 表格bar包含列idfoo_id

我有一个带有foo.name的传入HTTP查询,我想在bar中插入一行,bar.foo_id设置得恰当。所以,例如:

> SELECT * FROM foo;
id     name
------ -------
1      "Andrey"
(1 row)


> SELECT * FROM bar;
(0 rows)

鉴于"Andrey",我可以执行一个查询来获取:

> SELECT * FROM bar;
id     foo_id
------ -------
1      1
(1 row)

我正在思考:

> UPDATE bar SET foo_id=(SELECT id FROM foo WHERE foo.name=?)

但这似乎是错误的,因为SELECT的回归设定,而不是值......

4 个答案:

答案 0 :(得分:4)

你必须这样做

SELECT TOP 1 ID FROM foo where foo.name=?

但除此之外,在更新中进行选择没有任何问题。

答案 1 :(得分:2)

如果子查询只返回一个值(例如MAX()或TOP 1),这将在MS SQL Server中有效

我不确定这种语法在MySQL中是否有用,但你可以尝试一下......

UPDATE
  bar
SET
  bar.foo_id = foo.id
FROM
  bar
INNER JOIN
  foo
    ON foor.name = bar.name
ORDER BY
  foo.id

在这种情况下,如果连接在bar中每个记录返回多个结果,则将应用所有这些结果。该命令通过确定它们被应用的顺序,以及最后一个是否存在。

答案 2 :(得分:0)

至少在sql server和oracle上工作。

答案 3 :(得分:0)

尝试下面的

更新bAR SET foo_id = F.id 从酒吧 JOIN(从foo中选择id,其中foo.name = @fooName)F