【问题标题】:MYSQL INNER JOIN with possible empty fieldsMYSQL INNER JOIN 可能为空字段
【发布时间】:2013-07-30 19:06:38
【问题描述】:

好的,我在连接 2 个表时遇到问题(使用 INNER JOIN)。第一个表包含类别列表(用于相册或博客文章的 ecc),而第二个表包含“数据”

我试过这样:

SELECT galeries_id, galeries_title, 
       photos.photos_id, photos.photos_gal_id, photos.photos_link 
FROM galeries 
INNER JOIN photos 
ON galeries.galeries_id=photos.photos_gal_id 
GROUP BY photos_gal_id

这给了我公平的结果,很好地加入了我的表格,就像我希望他们通过一个关键的例外一样。

如果表“photos”没有包含“photos_gal_id”的行(例如“2”),那么即使它在 galeries 表中进行 egzist,它也不会返回该类别的任何类别(galeries_id、galeries_title) .

这是合乎逻辑的,因为:

 ON galeries.galeries_id=photos.photos_gal_id

现在我需要采用这部分来向我展示第二个表中没有相关行的鞋履

我想要得到的结果是:

galeries_id      galeries_title       photos_id       photos_link
     1               blabla              3            test.jpg
     2               bla bla2                                     
     3               etata               5            test.jpg

我希望我解释得足够好 :) 谢谢。。

【问题讨论】:

    标签: mysql join categories


    【解决方案1】:

    若要保留来自galeries 且照片中没有匹配 ID 的行,您需要使用LEFT JOIN 而不是INNER JOIN 加入图库中的照片:

    SELECT galeries_id, galeries_title, 
           photos.photos_id, photos.photos_gal_id, photos.photos_link 
    FROM galeries 
    LEFT JOIN photos 
    ON galeries.galeries_id=photos.photos_gal_id 
    GROUP BY photos_gal_id
    

     

    这会给你:

    galeries_id      galeries_title       photos_id       photos_link
         1               blabla              3            test.jpg
         2               bla bla2            NULL         NULL                
         3               etata               5            test.jpg
    

     

    如果你想用空字符串替换 NULL,你可以使用:

    SELECT
      IFNULL(photos.photos_id, ''),
      IFNULL(photos.photos_link, '')
    

    【讨论】:

    • 如果我只想获取 photos_id = null 的行怎么办
    • @albertDaracan,添加WHERE photos_id IS NULL
    【解决方案2】:

    不就是一个

    LEFT JOIN photos
    

    因为您希望记录不管是否填写?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多