gpt4 book ai didi

sql - 从没有主键的表中删除行,SQL

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

我正在尝试从 SQL 表中删除几行。问题是我不知道如何使用子查询的结果从该表中删除,因为该表中没有主键。表的结构如下:

friend (ID1,ID2)

ID1 的学生是 ID2 的学生的 friend 。友谊是相互的,所以如果 (123, 456) 在 Friend 表中,那么 (456, 123) 也是。

Likes ( ID1, ID2 )

ID1 的学生喜欢ID2 的学生。喜欢某人不一定是相互的,因此如果 (123, 456) 在 Likes 表中,则不能保证 (456, 123) 也存在。

(No primary key)

我要解决的情况是:

“如果两个学生 A 和 B 是 friend ,并且 A 喜欢 B 但不喜欢 B,则删除 Likes 元组。”

提前致谢。

最佳答案

要解决您的问题,请使用以下 sql 查询

delete from friend where (ID1,ID2)  not in
(Select f1.ID1,f1.ID2 from friend f1, friend f2 where f1.ID1 = f2.ID2 && f1.ID2 = f2.ID1)

如果您的数据库不支持“in”子句中的多列,则使用以下查询

delete from friend where concat(ID1,':',ID2)  not in
(Select concat(f1.ID1,':',f1.ID2) from friend f1, friend f2
where f1.ID1 = f2.ID2 && f1.ID2 = f2.ID1)

我们可以将 ID1 和 ID2 的组合视为复合主键吗?

最好始终在每个表中使用主键。请在您的表中添加一个带有整数自动递增字段的主键,这将很容易地解决您的问题

关于sql - 从没有主键的表中删除行,SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392793/

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