1

我有一个数据库,例如:

foo有列idnamebar有列idfoo_id

我有一个带有 a 的传入 HTTP 查询,我想在set 中适当foo.name地插入一行。因此,例如:barbar.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

4 回答 4

4

你必须做

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

但除此之外,在更新中进行选择并没有错。

于 2009-04-22T17:23:42.080 回答
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 中的每条记录返回多个结果,则将应用所有结果。通过确定应用它们的顺序来确定顺序,最后一个是持久的。

于 2009-04-22T17:27:20.277 回答
0

这至少适用于 sql server 和 oracle。

于 2009-04-22T17:23:44.077 回答
0

尝试关注

UPDATE bAR SET foo_id = F.id FROM bar JOIN (SELECT id from foo where foo.name = @fooName) F

于 2009-04-22T17:29:04.423 回答