回答
你还没有告诉我们你的数据库是什么,但是这会为SQL Server的工作。
update FirstTable
set f.FirstName = case when f.FirstName = s.MiddleName then s.FN else f.FirstName end,
f.LastName = case when f.LastName = s.MiddleName then s.FN else f.LastName end
from FirstTable f
inner join SecondTable s on f.FirstName = s.MiddleName or f.LastName = s.MiddleName
where s.FN <> 'aaa' -- Missed first time
我认为它不会像其他RDBMs一样正常工作。
编辑:添加了哪里到SQL,和下面的说明:
查询的形式为:
update table1
set col1 = x.colN
from table1 t
inner join table2 x on some condition
这是在两个部分更新+组线,并且从查询这是一个完整的选择语句没有实际的选择列列表。把第二个想象成以'select *'为前缀。
第二部分(select语句的内容)必须使用与更新部分相同的表 - 上述框架中的问题和table1中的FirstTable。由于它选择与更新相同的表中的行,因此它知道要更新哪些行,并使select部分中的列可用于更新部分。在框架中,我可以将table1中的col1设置为table2中的colN。
您的问题有点复杂,因为我不一定要更改名字或姓氏。要取FirstName,我想在FirstName = MiddleName时将FirstName更改为FN。要做到这一点,我使用的情况下,作为集的一部分:
set f.FirstName = case when f.FirstName = s.MiddleName then s.FN else f.FirstName end
这是说的时候名字=中间名,然后设置姓ØFN,否则将其设置为姓(换句话说,不要改变它)。
为LastName重复。
希望有所帮助。
(FN!= aaa)条件未被提及。你也可以解释查询吗? – user5705451
是的,西蒙只错过了'WHERE s.FN!='aaa''的情况。查询首先执行连接,然后更新第一行中指定的表(您可以简单地使用别名:'update f')。它将所有FirstName字段设置为'case'返回的内容,其逻辑非常简单:根据指定的条件返回's.FN'或'f.FirstName'。 – Andrew
编辑说明并添加缺少的地方(d'oh!) –
- 1. SQL组合选择,更新并加入到一个查询
- 2. 在单个查询中插入,选择和更新 - SQL
- 3. 在单个sql语句中插入和更新sql语句
- 4. 选择并更新单个查询
- 5. 在1个SQL语句中合并更新查询
- 6. 加入两个选择语句SQL
- 7. 单个查询中的多个SQL更新语句
- 8. SQL查询选择并更新
- 9. 从选择语句Sql查询更新表
- 10. 更新语句中具有选择子查询的嵌套SQL查询
- 11. 合并/加入SQL选择查询
- 12. 在同一个PL/SQL查询中选择并更新
- 13. SQl更新并在一个查询中选择
- 14. 在SQL中选择语句,联接和重新使用查询
- 15. 子查询与更新语句在SQL
- 16. SQL - 插入语句与子查询,然后更新语句
- 17. SQL Server在同一语句中选择并更新?
- 18. SQL在一个查询中有多个选择计数语句
- 19. SQL更新和在单个查询中选择
- 20. 加入SQL更新并选择
- 21. 更新值不包含在子查询中选择语句
- 22. Oracle更新并在单个查询中选择
- 23. 更新并在oracle 11g的单个查询中选择
- 24. 更新并在单个查询中选择
- 25. SQL加入查询选择
- 26. sql查询选择语句统计
- 27. SQL Oracle查询 - 选择语句
- 28. 在sql中选择语句在sql中选择语句
- 29. 选择并插入一个查询SQL
- 30. SQL更新查询选择查询
哪'RDBMS'您使用的是 –
可能的复制[更新和在一个查询中选择(http://stackoverflow.com/questions/4057244/update-and-select-in-one-query) –
SQL @ VR46 ..这种情况下不可用 – user5705451