基于 SELECT 脚本创建 DELETE 脚本
Creating a DELETE script based on a SELECT script
对PL/SQL相当陌生...
我有以下 SELECT 脚本,它连接两个不同的表以获得我需要的输出。
我在子查询中还有一个 WHERE 子句,它查看两个不同的条件:
SELECT p.provider_id, p.prov_name, ecp.*
FROM ey30h_check_provider ecp
JOIN provider p
ON ecp.provider_id = p.provider_id
JOIN ey30h_check ec
ON ecp.ey30h_check_id = ec.ey30h_check_id
WHERE (ecp.ey30h_check_id, ec.dern_number) IN
(select ec.ey30h_check_id, ec.dern_number
from ey30h_check ec
WHERE ec.dern_number = '52365214587'
AND ecp.provider_id = 50014);
此脚本的结果如下所示:
我将如何为此创建一个 DELETE 脚本?
我尝试使用以下脚本对其进行一些深入研究,但这显示“ORA-00918:列定义不明确”:
DELETE from ey30h_check_provider ecp
WHERE ecp.ey30h_check_id in
(select ec.ey30h_check_id from ey30h_check ec
JOIN ey30h_check ec ON ecp.ey30h_check_id = ec.ey30h_check_id
JOIN provider p ON ecp.provider_id = p.provider_id
WHERE ec.dern_number = '52365214587'
AND ecp.provider_id = 50014);
对 PL/SQL 还很陌生,所以任何建议将不胜感激 :)
试试这个:
DELETE from ey30h_check_provider ecp
WHERE ecp.ey30h_check_id in
(SELECT ecp.ey30h_check_id
FROM ey30h_check_provider ecp
JOIN provider p
ON ecp.provider_id = p.provider_id
JOIN ey30h_check ec
ON ecp.ey30h_check_id = ec.ey30h_check_id
JOIN provider p
ON ecp.provider_id = p.provider_id
WHERE (ecp.ey30h_check_id, ec.dern_number) IN
(select ec.ey30h_check_id, ec.dern_number from ey30h_check ec
WHERE ec.dern_number = '52365214587'
AND ecp.provider_id = 50014));
'ORA-00918: column ambiguously defined': 当连接中使用的列名称存在于多个 table 中并因此被含糊不清地引用时,就会发生这种情况。在连接中,出现在多个 table 中的任何列名在被引用时必须以其 table 名称作为前缀。该列应引用为 TABLE.COLUMN 或 TABLE_ALIAS.COLUMN.
如果您的 select 查询给出了正确的输出,您的删除查询应该不会给您带来任何问题。
对PL/SQL相当陌生...
我有以下 SELECT 脚本,它连接两个不同的表以获得我需要的输出。
我在子查询中还有一个 WHERE 子句,它查看两个不同的条件:
SELECT p.provider_id, p.prov_name, ecp.*
FROM ey30h_check_provider ecp
JOIN provider p
ON ecp.provider_id = p.provider_id
JOIN ey30h_check ec
ON ecp.ey30h_check_id = ec.ey30h_check_id
WHERE (ecp.ey30h_check_id, ec.dern_number) IN
(select ec.ey30h_check_id, ec.dern_number
from ey30h_check ec
WHERE ec.dern_number = '52365214587'
AND ecp.provider_id = 50014);
此脚本的结果如下所示:
我将如何为此创建一个 DELETE 脚本?
我尝试使用以下脚本对其进行一些深入研究,但这显示“ORA-00918:列定义不明确”:
DELETE from ey30h_check_provider ecp
WHERE ecp.ey30h_check_id in
(select ec.ey30h_check_id from ey30h_check ec
JOIN ey30h_check ec ON ecp.ey30h_check_id = ec.ey30h_check_id
JOIN provider p ON ecp.provider_id = p.provider_id
WHERE ec.dern_number = '52365214587'
AND ecp.provider_id = 50014);
对 PL/SQL 还很陌生,所以任何建议将不胜感激 :)
试试这个:
DELETE from ey30h_check_provider ecp
WHERE ecp.ey30h_check_id in
(SELECT ecp.ey30h_check_id
FROM ey30h_check_provider ecp
JOIN provider p
ON ecp.provider_id = p.provider_id
JOIN ey30h_check ec
ON ecp.ey30h_check_id = ec.ey30h_check_id
JOIN provider p
ON ecp.provider_id = p.provider_id
WHERE (ecp.ey30h_check_id, ec.dern_number) IN
(select ec.ey30h_check_id, ec.dern_number from ey30h_check ec
WHERE ec.dern_number = '52365214587'
AND ecp.provider_id = 50014));
'ORA-00918: column ambiguously defined': 当连接中使用的列名称存在于多个 table 中并因此被含糊不清地引用时,就会发生这种情况。在连接中,出现在多个 table 中的任何列名在被引用时必须以其 table 名称作为前缀。该列应引用为 TABLE.COLUMN 或 TABLE_ALIAS.COLUMN.
如果您的 select 查询给出了正确的输出,您的删除查询应该不会给您带来任何问题。