3

我正在创建一个社交网络,我有一个非常具体的案例,而且我几乎得到了正确的查询。我有 6 个表要合并到一个查询中。Tablerecent用于查找表brostplainegobrost和上的确切行,当在and表brostpublic上查找匹配时会变得复杂,其中 members.username 将与列 id 匹配,而 egos.egoname 将与列匹配。所有这些都按 unix 时间戳排序,在 recent.realtime 列中。这是当前的查询:membersegosbrostplainbrostpublicegobrostegoid

   SELECT recent.id, 
          recent.brosttype, 
          recent.postid, 
          recent.realtime, 
          members.username,
          egos.egoname, 
          brostplain.id, 
          brostplain.postid, 
          brostplain.content, 
          brostplain.up, 
          brostplain.down, 
          brostplain.timedata, 
          brostplain.realtime, 
          brostplain.attached, 
          brostplain.replies, 
          brostplain.ext, 
          brostplain.onpage, 
          brostplain.touser, 
          brostplain.isego, 
          brostplain.category, 
          egobrost.egoid, 
          egobrost.postid, 
          egobrost.content, 
          egobrost.up, 
          egobrost.down, 
          egobrost.timedata, 
          egobrost.realtime, 
          egobrost.attached, 
          egobrost.replies, 
          egobrost.ext, 
          egobrost.onpage, 
          egobrost.touser, 
          egobrost.isego, 
          egobrost.category, 
          brostpublic.id, 
          brostpublic.postid, 
          brostpublic.content, 
          brostpublic.up, 
          brostpublic.down, 
          brostpublic.timedata, 
          brostpublic.realtime, 
          brostpublic.attached, 
          brostpublic.replies, 
          brostpublic.ext, 
          brostpublic.category, 
          brostpublic.isego 
     FROM recent 
LEFT JOIN brostplain ON recent.brosttype=brostplain.brosttype 
      AND recent.postid=brostplain.postid 
LEFT JOIN brostpublic ON recent.brosttype=brostpublic.brosttype 
      AND recent.postid=brostpublic.postid 
LEFT JOIN egobrost ON recent.brosttype=egobrost.brosttype 
      AND recent.postid=egobrost.postid 
LEFT JOIN egos ON egos.egoid=egobrost.egoid
     JOIN members ON brostplain.id=members.id OR brostpublic.id=members.id 
    WHERE recent.id='2' ORDER BY recent.realtime DESC

现在这获取了所有相关行,但由于 egos 表的连接方式,它不会返回 egobrost 行的任何结果,我无法弄清楚在哪里放置连接或如何实现它。如果我在 egos 上省略 JOIN 并从我的 SELECT 中删除 egos.egoname,它将显示 egobrost 表上的行没问题,但我需要 egoname 作为我的输出。任何帮助将不胜感激。

编辑(已解决):经过深思熟虑,我通过将 LEFT 添加到 JOIN 上解决了这个问题members。现在结果集就完成了。感谢那些做出贡献的人。

4

1 回答 1

0

通过将成员上的 JOIN 更改为 LEFT JOIN 来解决,这与 egos 上的 LEFT JOIN 一致。这是最终的查询:

SELECT recent.id, 
          recent.brosttype, 
          recent.postid, 
          recent.realtime, 
          members.username,
          egos.egoname, 
          brostplain.id, 
          brostplain.postid, 
          brostplain.content, 
          brostplain.up, 
          brostplain.down, 
          brostplain.timedata, 
          brostplain.realtime, 
          brostplain.attached, 
          brostplain.replies, 
          brostplain.ext, 
          brostplain.onpage, 
          brostplain.touser, 
          brostplain.isego, 
          brostplain.category, 
          egobrost.egoid, 
          egobrost.postid, 
          egobrost.content, 
          egobrost.up, 
          egobrost.down, 
          egobrost.timedata, 
          egobrost.realtime, 
          egobrost.attached, 
          egobrost.replies, 
          egobrost.ext, 
          egobrost.onpage, 
          egobrost.touser, 
          egobrost.isego, 
          egobrost.category, 
          brostpublic.id, 
          brostpublic.postid, 
          brostpublic.content, 
          brostpublic.up, 
          brostpublic.down, 
          brostpublic.timedata, 
          brostpublic.realtime, 
          brostpublic.attached, 
          brostpublic.replies, 
          brostpublic.ext, 
          brostpublic.category, 
          brostpublic.isego 
     FROM recent 
LEFT JOIN brostplain ON recent.brosttype=brostplain.brosttype 
      AND recent.postid=brostplain.postid 
LEFT JOIN brostpublic ON recent.brosttype=brostpublic.brosttype 
      AND recent.postid=brostpublic.postid 
LEFT JOIN egobrost ON recent.brosttype=egobrost.brosttype 
      AND recent.postid=egobrost.postid 
LEFT JOIN egos ON egos.egoid=egobrost.egoid
LEFT JOIN members ON brostplain.id=members.id OR brostpublic.id=members.id 
    WHERE recent.id='2' ORDER BY recent.realtime DESC
于 2013-01-05T10:57:38.723 回答