【问题标题】:How to return all records from all tables?如何从所有表中返回所有记录?
【发布时间】:2014-05-19 08:21:59
【问题描述】:

对于学校作业,我必须编写一个查询来连接数据库中的所有表。 数据库如下所示:

Screenshot

所以查询需要连接所有的表并显示所有的记录。 我正在尝试这样做,但在过去的几天里它没有用。 谁能帮帮我?

我尝试了什么:

SELECT *
FROM gebruiker G,
    gebruiker G2 gebruikertype GT,
    aankoop A,
    trackaankoop TA,
    track T,
    genre GE
WHERE G.idGebruikertype = GT.idGebruikertype
    AND G.idGebruiker = A.idGebruiker
    AND A.idAankoop = TA.idAankoop
    AND TA.idTrack = T.idTrack
    AND T.idGebruiker = G2.idGebruiker
    AND T.idGenre = GE.idGenre.

【问题讨论】:

  • 您需要展示您的代码,人们不仅会为您编写查询,而且他们会很乐意帮助您解决到目前为止所做的事情。请记住,将表 A 连接到表 B 很容易(当建立关系时),但您需要指定查询应使用哪些列来检查相等性。
  • 你的老师真的要求你加入每个表并返回所有变量吗?这是一个奇怪的任务。也许你可以告诉我们什么“没用”?
  • 我试过这样:select * from gebruiker G,gebruiker G2 gebruikertype GT, aankoop A, trackaankoop TA, track T,genre GE where G.idGebruikertype = GT.idGebruikertype and G.idGebruiker = A .idGebruiker 和 A.idAankoop = TA.idAankoop 和 TA.idTrack = T.idTrack 和 T.idGebruiker = G2.idGebruiker 和 T.idGenre = GE.idGenre。
  • 澄清一下:gebruiker G1 是指该曲目的艺术家
  • 你能分享一下作业的确切措辞吗?

标签: sql database join


【解决方案1】:

如果您必须使用 JOIN 显示所有表的所有行,那么您需要 FULL JOIN 来显示记录。

SELECT *
FROM gebruiker G 
    FULL JOIN gebruikertype GT ON G.idGebruikertype = GT.idGebruikertype
    FULL JOIN aankoop A ON G.idGebruiker = A.idGebruiker
    FULL JOIN trackaankoop TA ON A.idAankoop = TA.idAankoop
    FULL JOIN track T ON TA.idTrack = T.idTrack
    FULL JOIN gebruiker G2 ON T.idGebruiker = G2.idGebruiker
    FULL JOIN genre GE ON T.idGenre = GE.idGenre

您使用 WHERE 子句重新创建的 JOIN 类型是 INNER JOIN,其中仅显示在所有表中都有对应的记录。

【讨论】:

  • 当我这样做时,我在完全加入时遇到错误。但是,当我用左连接替换完全连接时,它会为我提供所有用户(gebruikers)、他们的详细信息、用户类型(gebruikerstype)。它还显示 trackaankoopID,但这必须链接到需要显示的轨道。我该如何解决这个问题?
  • 忽略我的其他评论 :) 我只是检查数据库,'trackaankoop' 表显示为空。我添加了一条记录,它起作用了。感谢您的帮助!
【解决方案2】:

假设 Gebruiker 是主表,您可以使用以下内容加入

 SELECT G.*, R.*, GT.*, T.*, TG.*, A.*, C.*, TA.*
   FROM gebruiker AS G
        JOIN gebruikertype as GT ON GT.idGebruikerType = G.idGebruikerType
        JOIN review AS R ON R.idGebruiker = G.idGebruiker
        JOIN track AS T ON T.idGebruiker = G.idGebruiker
             JOIN genre as TG ON TG.idGenre = T.idGenre
        JOIN aankoop AS A ON A.idGebruiker = G.idGebruiker
             JOIN creditaankoop AS C ON C.idAankoop = A.idAankoop
             JOIN trackaankoop as TA ON TA.idAankoop = A.idAankoop

SELECT G.*, R.*, GT.*, T.*, TG.*, A.*, C.*, TA.*可以替换为SELECT *

Review 可以加入任一 Gebruiker 表:

 SELECT G.*, R.*
   FROM gebruiker AS G
        JOIN review AS R ON R.idGebruiker = G.idGebruiker

或轨道表:

 SELECT T.*, R.*
   FROM track AS T
        JOIN review AS R ON R.idTrack = T.idTrack

同样,TrackAankoop 表可以加入 Aankoop 表:

 SELECT G.*, A.*, TA.*
   FROM gebruiker AS G
        JOIN aankoop AS A ON A.idGebruiker = G.idGebruiker
             JOIN trackaankoop AS TA ON TA.idAankoop = A.idAankoop

或轨道表;

 SELECT T.*, TA.*
   FROM track AS T
        JOIN trackaankoop AS TA ON TA.idTrack = T.idTrack

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多