我有一个数据库,如:
表foo
包含id
列和name
列
表格bar
包含列id
和foo_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的回归设定,而不是值......
答案 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