从命名为共同朋友和喜欢的两个表(关系)中找到一种喜欢的朋友。SQL,数据库
Posted
技术标签:
【中文标题】从命名为共同朋友和喜欢的两个表(关系)中找到一种喜欢的朋友。SQL,数据库【英文标题】:find 1 way liked friends out of two tables(relation) named as mutual friends and likes.SQL, DATABASE 【发布时间】:2015-03-26 12:16:39 【问题描述】:两个表被命名为喜欢和其他的朋友。 两者都包含两列。第一列包含用户的 ID 号,第二列是他们共同的朋友。 我只想知道查询是 从包含共同朋友的朋友的喜欢表中删除该行,并且只完成了一种喜欢的方式..这意味着共同朋友中的一个不喜欢另一个。此信息在喜欢表中给出。 两列。 1 包含喜欢第二列中的另一个的用户的 id。
好友表
id 1 id 2
11 22-
22 11-
33 77*
55 68
77 33*
68 55
喜欢
id 1 id 2
11 22 (should be DELETED)
22 11 (should be DELETED)
33 77 (should be DELETED)
55 68 (save it)
77 33 (should be DELETED)
【问题讨论】:
您已标记此问题mysql 和oracle。您使用的是哪个 RDBMS?虽然两者都是甲骨文公司拥有的产品,但它们实际上是非常不同的(前者是免费的和开源的;而后者是商业的和专有的封闭源代码)。这很重要,因为它们的 SQL 变体具有不同的语法。 55是68的朋友,55点赞68,根据解释的逻辑和例子,为什么第二张桌子上是“(save it)”? 【参考方案1】:您可以删除连接的结果:
DELETE l1 FROM likes l1 JOIN likes l2 ON l1.id1 = l2.id2 AND l1.id2 = l1.id1
【讨论】:
【参考方案2】:你可以删除id,其中id在selectfriends inner join id1 to id2 and Id2 to ID1
delete from likes where F1.id1 in (
select f1.*,f2.*
from freinds f1
inner join freinds f2 on
F1.id1 = F2.id2 and F1.id2=F2.id1
)
【讨论】:
我不太了解。你能解释一下这个概念而不是代码只是概念吗??? @AtirChaudary 我知道你想在喜欢表中删除朋友在它的朋友中也允许找到它链接到 Friends_1.id2 到 Friends_2.id1 和 Friends_1.id1 到 Friends_2 .id2。如果 id1 在 Select 语句中,则删除 where 子句【参考方案3】:我对这种情况的处理方法如下: 我将 id1 和 id2 连接为字符串,然后将其与第二个表中的连接进行比较并删除匹配的条目。
DELETE FROM likes
WHERE CONCAT(id1, '-',id2) IN (SELECT concat(id1,'-',id2) AS Relationship FROM friends);
例如,如果有一个喜欢的“11-22”和一个朋友“11-22”,那么应该删除那个“喜欢”条目,是吗?这就是这种方法的工作原理。
【讨论】:
以上是关于从命名为共同朋友和喜欢的两个表(关系)中找到一种喜欢的朋友。SQL,数据库的主要内容,如果未能解决你的问题,请参考以下文章