2009-04-22 73 views
1

我有一个像其中一个数据库:我可以在SQL UPDATE内部有一个SELECT吗?

foo有列idnamebar有列idfoo_id

我有一个foo.name传入HTTP查询,我想插入一行到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

你将不得不做

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

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

0

这将工作至少在SQL Server和Oracle。

2

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

我不知道,如果这句法叉在MySQL,但你可以试试它...

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

在这种情况下,如果连接返回每条记录中的多条结果,它们将全部应用。通过确定它们被应用的顺序,以及最后一个被执行的顺序。

0

尝试如下因素

UPDATE BAR SET foo_id = F.id FROM巴 JOIN(自FOO选择id其中foo.name = @fooName)的F

相关问题