MYSQL INNER JOIN可能包含空字段

uol*_*laa 9 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
Run Code Online (Sandbox Code Playgroud)

这给了我很好的结果,很好地加入我的桌子,就像我希望他们有一个关键的例子.

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

这是合乎逻辑的,因为:

 ON galeries.galeries_id=photos.photos_gal_id
Run Code Online (Sandbox Code Playgroud)

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

我想要的结果是:

galeries_id      galeries_title       photos_id       photos_link
     1               blabla              3            test.jpg
     2               bla bla2                                     
     3               etata               5            test.jpg
Run Code Online (Sandbox Code Playgroud)

我希望我解释得很好:)谢谢..

Mar*_*ark 28

要保留galeries照片中没有匹配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
Run Code Online (Sandbox Code Playgroud)

 

这会给你:

galeries_id      galeries_title       photos_id       photos_link
     1               blabla              3            test.jpg
     2               bla bla2            NULL         NULL                
     3               etata               5            test.jpg
Run Code Online (Sandbox Code Playgroud)

 

如果您希望用空字符串替换NULL,您可以使用:

SELECT
  IFNULL(photos.photos_id, ''),
  IFNULL(photos.photos_link, '')
Run Code Online (Sandbox Code Playgroud)


小智 5

它不会只是一个

LEFT JOIN photos
Run Code Online (Sandbox Code Playgroud)

因为你想让记录不管他们是否被填满?