10

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

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

4

2 回答 2

37

要保留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, '')
于 2013-07-30T15:00:02.610 回答
5

这不就是一个

LEFT JOIN photos

因为你想要记录不管是否被填写?

于 2013-07-30T15:02:31.640 回答