您的位置:首页 > 职场人生

SQL面试

2015-06-29 22:47 357 查看
假设有两个表,tab1,tab2,分别有产品名称和产品价格,现在我想用tab2的价格替换tab1的价格,我写的语句是Update tab1 set tab1.产品价格=tab2.产品价格 where tab1.产品名称=tab2.产品名称

结果出现错误,提示为:列前缀 'tab2' 与查询中所用的表名或别名不匹配。请问应该怎样写,

SQL语句是不支持多表同时更新的。

应该这样写

update tab1 set tab1.产品价格 = (select tab2.产品价格 from tab2 where tab2.产品名称 = tab1.产品名称) where tabl1.产品名称 in (select tab2.产品名称 from tab2)

后面的where tab1.产品名称 in (select tab2.产品名称 from tab2) 这句保证了如果tab1的产品在tab2没有记录时不会出错。

在开发中,数据库来回换,而有些关键性的语法又各不相同,这是一件让开发人员很头痛的事情.本文总结了Update语句更新多表时在SQL Server,Oracle,MySQL三种数据库中的用法.我也试了SQLite数据库,都没成功,不知是不支持多表更新还是咋的.

在本例中:

我们要用表gdqlpj中的gqdltks,bztks字段数据去更新landleveldata中的同字段名的数据,条件是当landleveldata 中的GEO_Code字段值与gdqlpj中的lxqdm字段值相等时进行更新.

SQL Server语法:

UPDATE

{

table_name WITH ( < table_hint_limited > [ ...n ] )

| view_name

| rowset_function_limited

}

SET

{ column_name = { expression | DEFAULT | NULL }

| @variable = expression

| @variable = column = expression } [ ,...n ]

{ { [ FROM { < table_source > } [ ,...n ] ]

[ WHERE

< search_condition > ] }

|

[ WHERE CURRENT OF

{ { [ GLOBAL ] cursor_name } | cursor_variable_name }

] }

[ OPTION ( < query_hint > [ ,...n ] ) ]

SQL Server示例:

update a

set a.gqdltks=b.gqdltks,a.bztks=b.bztks

from landleveldata a,gdqlpj b

where a.GEO_Code=b.lxqdm

Oracle语法:

UPDATE updatedtable

SET (col_name1[,col_name2...])=

(SELECT col_name1,[,col_name2...]

FROM srctable [WHERE where_definition])

Oracel 示例:

update landleveldata a

set (a.gqdltks, a.bztks)=

(select b.gqdltks, b.bztks from gdqlpj b

where a.GEO_Code=b.lxqdm)

MySQL语法:

UPDATE table_references

SET col_name1=expr1 [, col_name2=expr2 ...]

[WHERE where_definition]

MySQL 示例:

update landleveldata a, gdqlpj b

set a.gqdltks= b.gqdltks,

a.bztks= b.bztks

where a.GEO_Code=b.lxqdm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: