请教:关于子查询的一个sql的写法
时间:2010-11-10
来源:互联网
本帖最后由 langfanyun11 于 2010-11-11 15:13 编辑
各位好,
本人初学sybase,对sybase的sql不怎么明白,查了一些资料,好像子查询和oracle不太一样。
请教一个sql的写法。
有2个表,table_a和table_b
table_a的字段: PRODUCT1, PRODUCT2, PRODUCT3,
SERIAL1, SERIAL2, SERIAL3,
SUB_PRODUCT1, SUB_PRODUCT2, SUB_PRODUCT3,
SUB_SERIAL1, SUB_SERIAL2, SUB_SERIAL3,
XXX1, XXX2...
table_b的字段: PRODUCT1, PRODUCT2, PRODUCT3,
SERIAL1, SERIAL2, SERIAL3,
SUB_PRODUCT1, SUB_PRODUCT2, SUB_PRODUCT3,
SUB_SERIAL1, SUB_SERIAL2, SUB_SERIAL3,
YYY1, YYY2...
两个表的PK都是SERIAL1,SERIAL2,SERIAL3,SUB_SERIAL1,SUB_SERIAL2,SUB_SERIAL3
想从table_a中检索出与table_b中SUB_SERIAL1,2,3值相同的数据,
并且用table_b的PRODUCT1,2,3, SERIAL_1,2,3字段去更新对应的table_a表的SUB_PRODUCT1,2,3, SUB_SERIAL_1,2,3字段。
但是如果有SERIAL,SUB_SERIAL1,2,3冲突时,需要删除table_a中冲突的那条记录,再更新。
因为数据量很大,并且循环操作,所以性能方面也需要考虑。
先谢谢了。
各位好,
本人初学sybase,对sybase的sql不怎么明白,查了一些资料,好像子查询和oracle不太一样。
请教一个sql的写法。
有2个表,table_a和table_b
table_a的字段: PRODUCT1, PRODUCT2, PRODUCT3,
SERIAL1, SERIAL2, SERIAL3,
SUB_PRODUCT1, SUB_PRODUCT2, SUB_PRODUCT3,
SUB_SERIAL1, SUB_SERIAL2, SUB_SERIAL3,
XXX1, XXX2...
table_b的字段: PRODUCT1, PRODUCT2, PRODUCT3,
SERIAL1, SERIAL2, SERIAL3,
SUB_PRODUCT1, SUB_PRODUCT2, SUB_PRODUCT3,
SUB_SERIAL1, SUB_SERIAL2, SUB_SERIAL3,
YYY1, YYY2...
两个表的PK都是SERIAL1,SERIAL2,SERIAL3,SUB_SERIAL1,SUB_SERIAL2,SUB_SERIAL3
想从table_a中检索出与table_b中SUB_SERIAL1,2,3值相同的数据,
并且用table_b的PRODUCT1,2,3, SERIAL_1,2,3字段去更新对应的table_a表的SUB_PRODUCT1,2,3, SUB_SERIAL_1,2,3字段。
但是如果有SERIAL,SUB_SERIAL1,2,3冲突时,需要删除table_a中冲突的那条记录,再更新。
因为数据量很大,并且循环操作,所以性能方面也需要考虑。
先谢谢了。
作者: langfanyun11 发布时间: 2010-11-10
试着写的SQL如下,但是不对。
FOR XXXX AS cursTABLE_A CURSOR FOR
SELECT
TABLE_A.DIVISION AS TABLE_A_DIVISION,
TABLE_A.PRODUCT_NO1 AS TABLE_A_PRODUCT_NO1,
TABLE_A.PRODUCT_NO2 AS TABLE_A_PRODUCT_NO2,
TABLE_A.PRODUCT_NO3 AS TABLE_A_PRODUCT_NO3,
TABLE_A.SERIAL_NO1 AS TABLE_A_SERIAL_NO1,
TABLE_A.SERIAL_NO2 AS TABLE_A_SERIAL_NO2,
TABLE_A.SERIAL_NO3 AS TABLE_A_SERIAL_NO3,
TABLE_A.SUB_DIVISION AS TABLE_A_SUB_DIVISION,
TABLE_A.SUB_PRODUCT_NO1 AS TABLE_A_SUB_PRODUCT_NO1,
TABLE_A.SUB_PRODUCT_NO2 AS TABLE_A_SUB_PRODUCT_NO2,
TABLE_A.SUB_PRODUCT_NO3 AS TABLE_A_SUB_PRODUCT_NO3,
TABLE_A.SUB_SERIAL_NO1 AS TABLE_A_SUB_SERIAL_NO1,
TABLE_A.SUB_SERIAL_NO2 AS TABLE_A_SUB_SERIAL_NO2,
TABLE_A.SUB_SERIAL_NO3 AS TABLE_A_SUB_SERIAL_NO3,
TABLE_B.DIVISION AS TABLE_B_DIVISION,
TABLE_B.PRODUCT_NO1 AS TABLE_B_PRODUCT_NO1,
TABLE_B.PRODUCT_NO2 AS TABLE_B_PRODUCT_NO2,
TABLE_B.PRODUCT_NO3 AS TABLE_B_PRODUCT_NO3,
TABLE_B.SERIAL_NO1 AS TABLE_B_SERIAL_NO1,
TABLE_B.SERIAL_NO2 AS TABLE_B_SERIAL_NO2,
TABLE_B.SERIAL_NO3 AS TABLE_B_SERIAL_NO3
FROM TABLE_A, TABLE_B
WHERE
TABLE_A.SUB_SERIAL_NO1 = TABLE_B.SUB_SERIAL_NO1 AND
TABLE_A.SUB_SERIAL_NO2 = TABLE_B.SUB_SERIAL_NO2 AND
TABLE_A.SUB_SERIAL_NO3 = TABLE_B.SUB_SERIAL_NO3
FOR UPDATE
DO
DELETE
FROM TABLE_A
WHERE
TABLE_A.DIVISION = TABLE_A_DIVISION AND
TABLE_A.PRODUCT_NO1 = TABLE_A_PRODUCT_NO1 AND
TABLE_A.PRODUCT_NO2 = TABLE_A_PRODUCT_NO2 AND
TABLE_A.PRODUCT_NO3 = TABLE_A_PRODUCT_NO3 AND
TABLE_A.SERIAL_NO1 = TABLE_A_SERIAL_NO1 AND
TABLE_A.SERIAL_NO2 = TABLE_A_SERIAL_NO2 AND
TABLE_A.SERIAL_NO3 = TABLE_A_SERIAL_NO3 AND
TABLE_A.SUB_DIVISION = TABLE_B_DIVISION AND
TABLE_A.SUB_PRODUCT_NO1 = TABLE_B_PRODUCT_NO1 AND
TABLE_A.SUB_PRODUCT_NO2 = TABLE_B_PRODUCT_NO2 AND
TABLE_A.SUB_PRODUCT_NO3 = TABLE_B_PRODUCT_NO3 AND
TABLE_A.SUB_SERIAL_NO1 = TABLE_B_SERIAL_NO1 AND
TABLE_A.SUB_SERIAL_NO2 = TABLE_B_SERIAL_NO2 AND
TABLE_A.SUB_SERIAL_NO3 = TABLE_B_SERIAL_NO3 ;
UPDATE TABLE_A
SET TABLE_A_SUB_DIVISION = TABLE_B_DIVISION,
TABLE_A_SUB_PRODUCT_NO1 = TABLE_B_PRODUCT_NO1,
TABLE_A_SUB_PRODUCT_NO2 = TABLE_B_PRODUCT_NO2,
TABLE_A_SUB_PRODUCT_NO3 = TABLE_B_PRODUCT_NO3,
TABLE_A_SUB_SERIAL_NO1 = TABLE_B_SERIAL_NO1,
TABLE_A_SUB_SERIAL_NO2 = TABLE_B_SERIAL_NO2,
TABLE_A_SUB_SERIAL_NO3 = TABLE_B_SERIAL_NO3
WHERE CURRENT OF cursTABLE_A ;
END FOR ;
错误:
Update operation attempted on non-updatable query
SQLCODE=-192, ODBC 3 State='42000'
FOR XXXX AS cursTABLE_A CURSOR FOR
SELECT
TABLE_A.DIVISION AS TABLE_A_DIVISION,
TABLE_A.PRODUCT_NO1 AS TABLE_A_PRODUCT_NO1,
TABLE_A.PRODUCT_NO2 AS TABLE_A_PRODUCT_NO2,
TABLE_A.PRODUCT_NO3 AS TABLE_A_PRODUCT_NO3,
TABLE_A.SERIAL_NO1 AS TABLE_A_SERIAL_NO1,
TABLE_A.SERIAL_NO2 AS TABLE_A_SERIAL_NO2,
TABLE_A.SERIAL_NO3 AS TABLE_A_SERIAL_NO3,
TABLE_A.SUB_DIVISION AS TABLE_A_SUB_DIVISION,
TABLE_A.SUB_PRODUCT_NO1 AS TABLE_A_SUB_PRODUCT_NO1,
TABLE_A.SUB_PRODUCT_NO2 AS TABLE_A_SUB_PRODUCT_NO2,
TABLE_A.SUB_PRODUCT_NO3 AS TABLE_A_SUB_PRODUCT_NO3,
TABLE_A.SUB_SERIAL_NO1 AS TABLE_A_SUB_SERIAL_NO1,
TABLE_A.SUB_SERIAL_NO2 AS TABLE_A_SUB_SERIAL_NO2,
TABLE_A.SUB_SERIAL_NO3 AS TABLE_A_SUB_SERIAL_NO3,
TABLE_B.DIVISION AS TABLE_B_DIVISION,
TABLE_B.PRODUCT_NO1 AS TABLE_B_PRODUCT_NO1,
TABLE_B.PRODUCT_NO2 AS TABLE_B_PRODUCT_NO2,
TABLE_B.PRODUCT_NO3 AS TABLE_B_PRODUCT_NO3,
TABLE_B.SERIAL_NO1 AS TABLE_B_SERIAL_NO1,
TABLE_B.SERIAL_NO2 AS TABLE_B_SERIAL_NO2,
TABLE_B.SERIAL_NO3 AS TABLE_B_SERIAL_NO3
FROM TABLE_A, TABLE_B
WHERE
TABLE_A.SUB_SERIAL_NO1 = TABLE_B.SUB_SERIAL_NO1 AND
TABLE_A.SUB_SERIAL_NO2 = TABLE_B.SUB_SERIAL_NO2 AND
TABLE_A.SUB_SERIAL_NO3 = TABLE_B.SUB_SERIAL_NO3
FOR UPDATE
DO
DELETE
FROM TABLE_A
WHERE
TABLE_A.DIVISION = TABLE_A_DIVISION AND
TABLE_A.PRODUCT_NO1 = TABLE_A_PRODUCT_NO1 AND
TABLE_A.PRODUCT_NO2 = TABLE_A_PRODUCT_NO2 AND
TABLE_A.PRODUCT_NO3 = TABLE_A_PRODUCT_NO3 AND
TABLE_A.SERIAL_NO1 = TABLE_A_SERIAL_NO1 AND
TABLE_A.SERIAL_NO2 = TABLE_A_SERIAL_NO2 AND
TABLE_A.SERIAL_NO3 = TABLE_A_SERIAL_NO3 AND
TABLE_A.SUB_DIVISION = TABLE_B_DIVISION AND
TABLE_A.SUB_PRODUCT_NO1 = TABLE_B_PRODUCT_NO1 AND
TABLE_A.SUB_PRODUCT_NO2 = TABLE_B_PRODUCT_NO2 AND
TABLE_A.SUB_PRODUCT_NO3 = TABLE_B_PRODUCT_NO3 AND
TABLE_A.SUB_SERIAL_NO1 = TABLE_B_SERIAL_NO1 AND
TABLE_A.SUB_SERIAL_NO2 = TABLE_B_SERIAL_NO2 AND
TABLE_A.SUB_SERIAL_NO3 = TABLE_B_SERIAL_NO3 ;
UPDATE TABLE_A
SET TABLE_A_SUB_DIVISION = TABLE_B_DIVISION,
TABLE_A_SUB_PRODUCT_NO1 = TABLE_B_PRODUCT_NO1,
TABLE_A_SUB_PRODUCT_NO2 = TABLE_B_PRODUCT_NO2,
TABLE_A_SUB_PRODUCT_NO3 = TABLE_B_PRODUCT_NO3,
TABLE_A_SUB_SERIAL_NO1 = TABLE_B_SERIAL_NO1,
TABLE_A_SUB_SERIAL_NO2 = TABLE_B_SERIAL_NO2,
TABLE_A_SUB_SERIAL_NO3 = TABLE_B_SERIAL_NO3
WHERE CURRENT OF cursTABLE_A ;
END FOR ;
错误:
Update operation attempted on non-updatable query
SQLCODE=-192, ODBC 3 State='42000'
作者: langfanyun11 发布时间: 2010-11-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28