MYSQL INNER JOIN可能包含空字段

时间:2013-07-30 14:51:58

标签: mysql join categories

好的,我在加入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_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

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

2 个答案:

答案 0 :(得分:27)

要保留照片中没有匹配ID的galeries行,您需要使用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, '')

答案 1 :(得分:2)

不会只是一个

LEFT JOIN photos

因为您希望这些记录无论是否充满?