【发布时间】:2021-05-13 20:40:29
【问题描述】:
试图从其他表中存在匹配记录的表中删除。
我尝试了不同的变体,但这个返回:
SQL 错误 [42601]:[SQL0199] 不需要关键字 INNER。有效令牌:使用 SKIP WAIT WITH FETCH LIMIT ORDER WHERE OFFSET。
它基本上是一个跨库/跨数据库,但不能让 DB2 一起玩。如果我将删除替换为 SELECT *
,则 Select 可以正常工作 DELETE a
FROM INHOUSE.ANDREWCAT a
INNER JOIN ERPLIB.SRBPRG b ON
a.PSPRDC = b.PGPRDC
INNER JOIN ERPLIB.SRBRSD c
ON
b.PGIRGP = c.RDSRTY
AND c.RDTOFI = a.EPNUM AND c.RDSRTY = c.RDWHAT
AND a.EPNUM = 'REM104'
【问题讨论】:
-
我不是 DB2 专家,但我确实找到了这个,它提供了一个潜在的解决方案:stackoverflow.com/questions/13523373/…
-
另一个想法可能是在架构级别解决这个问题。您可以使用级联删除,以便对一个表的删除会导致对具有外键链接的表进行删除。 ibm.com/docs/en/informix-servers/14.10/… 我以前在 Postgres 数据库中使用过这种东西,它也可能有一些缺点。通常,写入(删除)只能发生在单个主数据库上。删除将导致发生删除的表上的锁定。您一次获得足够的这些删除,您可能会意外锁定您的数据库。
-
你有
DELETE a FROM...。这不应该工作。试过SELECT之后,你是不是只剩它了? -
@PM77-1 DELETE a 应该可以工作,因为它是一个别名。我也试过 DELETE FROM INHOUSE.ANDREWCAT INNER JOIN... 然后它不喜欢关键字 INNER。
-
为什么加入?
delete from table where exists...
标签: sql db2 sql-delete