连接mysql数据库中的三个表

时间:2019-07-15 14:42:44

标签: mysql database

我正在尝试在mysql中加入三个表。我有三个表,分别称为post,sharepost和user。我想加入sharepost和用户以检索共享该帖子的用户的名字和姓氏,我想加入该帖子和用户以检索该帖子的原始用户的名字和姓氏以及其他列。

帖子表具有以下列,

postID, title, description, userID, dateposted,likes.

sharepost表具有

postid, shareuserid, dateshared,likes

用户表具有

userID, firstname, lastname, datejoined, email, password, birthdate.
sharepost中的

postid引用了post表中的postID。 userID和shareuserid都引用相同的用户表。 我想检索原始用户以及共享该帖子的用户。

发布表的示例数据是, enter image description here

股份表的

样本数据是, enter image description here

用户表的样本数据是, enter image description here

以下查询可以检索共享该帖子的用户的名字和姓氏

SELECT P.postID,P.userID, P.title, P.description, S.shareuserID,
U.firstname, S.dateShared, S.likes from sharepost S join post P 
on S.postID=P.postID join user U on S.shareuserID=U.userID

我希望从发帖表中检索原始用户以及从sharepost表中共享发帖的用户,但我只会得到共享用户的名字。

enter image description here

2 个答案:

答案 0 :(得分:0)

以下应该可以解决问题:

    SELECT p.postID,
           p.userID AS author_id,
           p.title,
           p.description,
           sp.shareuserid AS sharer_id,
           sp.dateShared,
           sp.likes,
           u1.firstname AS author_forename,
           u1.lastname AS author_surname,
           u2.firstname AS sharer_forename,
           u2.lastname AS sharer_surname
      FROM post p
INNER JOIN sharepost sp ON p.id = sp.postid
INNER JOIN user u1 ON p.userID = u1.userID
INNER JOIN user u2 ON sp.shareuserid = u1.userID

值得注意的是,在您的模式中我看不到对likes的任何引用。不确定是不是错字?

答案 1 :(得分:0)

由于@BenM的回答,我设法将查询修改为以下返回我预期结果的内容,

SELECT P.postID,
          P.userID, 
          P.title, 
          P.description, 
          S.shareuserID, 
          U.firstname AS sharer_name, 
          U1.firstname as author_name, 
          S.dateShared, S.likes 
     from sharepost S 
join post P on S.postID = P.postID 
     join user U on S.shareuserID = U.userID 
     join user U1 on P.userID=U1.userID