【问题标题】:merge 2 selects into 1将 2 个选择合并为 1
【发布时间】:2013-11-05 15:27:54
【问题描述】:

我正在做一个选择。 我有一张叫做 vriend 的桌子和一张叫做 gebruiker 的桌子。现在我有 2 个选择,可以给我想要的结果,但我想将它们合并在一起

SELECT g.naam,g.gebruikerID 
FROM gebruiker g 
INNER JOIN vriend v on g.gebruikerID = v.gebruikerID_Jezelf 
WHERE g.gebruikerID IN(SELECT gebruikerID_Jezelf FROM vriend);

SELECT g.naam,g.gebruikerID 
FROM gebruiker g 
INNER JOIN vriend v on g.gebruikerID = v.gebruikerID_Persoon 
WHERE g.gebruikerID IN(SELECT gebruikerID_Persoon FROM vriend);

我想要的是将这 2 个选择语句合并在一起 NOT WITH A UNION 但例如:

选择 1 给出:

不结盟运动 | ID ----------------- 亨克 | 1 卡雷尔 | 2

选择 2 给出:

不结盟运动 | ID ----------------- 安德鲁 | 4 皮特 | 5

合并会比

不结盟运动 |身份证 |不结盟运动 | ID ------------------------------------------ 亨克 | 1 |安德鲁 | 4 卡雷尔 | 2 |皮特 | 5

【问题讨论】:

  • WHERE 子句没有意义,它们只是重复 JOIN...ON 条件中的条件,因此它们始终为真,您可以省略它们。
  • 嗯,这是真的,在哪里没有意义,但我仍然如何合并它们,或者你知道一个更好的选择语句,因为问题是人的名字站在gebruiker 表和仅 vriend 表中的 ID。我想要的不仅是显示 ID,还要显示该用户的名称。
  • @user2919513 的解决方案看起来是正确的(但他可以省略整个 where 子句)
  • 为什么亨克和安德鲁有关系?为什么卡雷尔与皮特有关?我在您的数据中看不到这种关系。 “合并”是什么意思?它通常表示 UNION,但您已经排除了它。
  • 在表格中,vriend 代表谁是朋友,例如 Henk (ID 1) 是 Andrew(ID4) 的朋友,但 ID 已插入表格 vriend 我要显示的是 ID和名字。并且名称来自表 gebruiker

标签: sql database oracle select


【解决方案1】:
SELECT g.naam,g.gebruikerID ,g2.naam,g2.gebruikerID
FROM gebruiker g , gebruiker g2, vriend v
WHERE g.gebruikerID = v.gebruikerID_Jezelf 
OR g2.gebruikerID = v.gebruikerID_Persoon
AND g.gebruikerID IN(SELECT gebruikerID_Jezelf FROM vriend) 
OR g2.gebruikerID IN(SELECT gebruikerID_Persoon FROM vriend);

【讨论】:

  • 错误报告 - SQL 错误:ORA-00904: "G"."GEBRUIKERID": invalid identifier 00904. 00000 - "%s: invalid identifier" 这个错误出现在第一个内部连接上
  • 它几乎可以工作,但我会得到双排,例如 piet 是他自己的朋友
【解决方案2】:
SELECT g.naam, g.gebruikerID
    , g2.naam, g2.gebruikerID
FROM vriend v
JOIN gebruiker g1 on g1.gebruikerID = v.gebruikerID_Jezelf 
JOIN gebruiker g2 ON g2.gebruikerID = v.gebruikerID_Persoon
   ;

【讨论】:

    【解决方案3】:

    试试这个

     SELECT g.naam,g.gebruikerID 
       FROM gebruiker g 
       INNER JOIN vriend v on g.gebruikerID = v.gebruikerID_Jezelf 
       WHERE g.gebruikerID IN(SELECT gebruikerID_Jezelf FROM vriend) OR g.gebruikerID IN(SELECT  gebruikerID_Persoon FROM vriend);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 2012-06-26
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多