繁体   English   中英

结合三个表加入mysql

[英]combine three tables in join mysql

我正在尝试显示图像,用户名以及查询附带的回复。 我使用了类似下面的代码,但是对于回复列,即使信息已满,我仍会得到null或空值。 它有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

更新。 上面的代码有效。

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

无论如何,对您的查询进行一些清理。 目前尚不清楚标题表如何链接到答复,您是否有LEFT-JOIN答复,但随后查找映像的IS NOT NULL。 这表示INNER联接与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子句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM