从命名为共同朋友和喜欢的两个表(关系)中找到一种喜欢的朋友。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,数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在任何二叉树中找到两个节点的最低共同祖先?

推荐朋友 - LintCode

F - Friends ZOJ - 3710(暴力)

如何在 C# Web API 中加入两个表

从数据库表中获取相互关系

为什么QQ能帮你找到失散多年的兄弟?----图论