在连接mysql中组合三个表

时间:2013-10-15 18:51:48

标签: mysql

我正在尝试显示图片,用户名以及与查询一起回复的回复。我使用了类似下面的代码,但对于回复列,即使信息已满,我仍然会得到空或空。它有3个表格,用于标题,图像和回复。标题包括用户的用户框和其他信息,图像和回复人的回复。

reply.mid假设匹配images.mid,以便回复可以在图像旁边。

  SELECT images.id, images.who, header.username, images.message, images.name,     reply.reply
 FROM header, images
  LEFT JOIN reply ON reply.reply = reply.mid
OR reply.mid = images.mid
WHERE images.name IS NOT NULL = header.id
 AND images.who IS NOT NULL 
AND images.message IS NOT NULL 
 GROUP BY images.mid

下面的故事结构。对不起

  TABLE Header
  username
  id
  who
  where

 Table images
 message
 name
  mid  - id that auto increments when image is loaded
 id
 content

 Table reply
 mid  id that is taken from images mid to relate image to reply.
  reply
  id ----this is only for an id for a reply that is auto increment

更新。上面的代码有效。

1 个答案:

答案 0 :(得分:0)

根据其他人的评论,您还有一个GROUP BY,用于进行聚合(例如MIN(),MAX(),AVG()等),例如每个销售代表的总销售额,每月,每个通过分组按图像ID,您可能会丢失一个人可能有多个回复的实例。

无论如何,对你的查询进行一点清理。目前还不清楚标题表如何链接到回复,你有一个LEFT-JOIN回复,但后来寻找图像的IS NOT NULL。这表示INNER加入vs LEFT加入。我正在转移查询,因为你正在寻找回复和那些为图像而来的人,所以就这样吧。

SELECT  
      H.username, 
      I.id, 
      I.who, 
      I.message,  
      I.name, 
      R.reply
   FROM 
      replies R
         join header H
            on R.SomeKeyToLinkToHeader = H.SomeHeaderKeyLinkingToReplies
         LEFT join images I
            on R.ID = I.MID
            OR R.MID = I.MID
   WHERE
      I.MID IS NOT NULL

IS NOT NULL的测试只需要真正在任何一个键列上...如果它为null,那么整个记录都会丢失并且也将为null。 (即:它无法找到回复“ID”或“MID”列的匹配。

如果您提供了表结构以更好地显示表之间的关系,则上述查询显然会略有改变。您可能打算使用ORDER BY而不是GROUP BY子句。