gpt4 book ai didi

sqlite - 如何在 SQLite 中删除具有 2 列作为复合主键的多行?

转载 作者:行者123 更新时间:2023-12-03 17:48:06 27 4
gpt4 key购买 nike

我需要删除 SQLite 表中的一些行,其中两列作为主键,如下所示:

DELETE FROM apt_lang 
WHERE (apt_fk, apt_lang_fk) NOT IN ((42122,"en"),(42123,"es"),(42123,"en"))

这适用于 Oracle 和 MySQL,但不适用于 SQLite。

谁能帮帮我?

最佳答案

首先,找出要删除的行。最简单的方法是使用连接:

SELECT *
FROM apt_lang
JOIN (SELECT 42122 AS apt_fk, 'en' AS apt_lang_fk UNION ALL
SELECT 42123 , 'es' UNION ALL
SELECT 42123 , 'en' )
USING (apt_fk, apt_lang_fk)

要将其与 DELTE 一起使用,请检查 EXISTS 是否匹配:

DELETE FROM apt_lang
WHERE NOT EXISTS (SELECT 1
FROM apt_lang AS a2
JOIN (SELECT 42122 AS apt_fk, 'en' AS apt_lang_fk UNION ALL
SELECT 42123 , 'es' UNION ALL
SELECT 42123 , 'en' )
USING (apt_fk, apt_lang_fk)
WHERE apt_fk = apt_lang.apt_fk
AND apt_lang_fk = apt_lang.apt_lang_fk)

或获取 ROWID子查询的 s 并检查那些:

DELETE FROM apt_lang
WHERE rowid NOT IN (SELECT apt_lang.rowid
FROM apt_lang
JOIN (SELECT 42122 AS apt_fk, 'en' AS apt_lang_fk UNION ALL
SELECT 42123 , 'es' UNION ALL
SELECT 42123 , 'en' )
USING (apt_fk, apt_lang_fk))

关于sqlite - 如何在 SQLite 中删除具有 2 列作为复合主键的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29073838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com