2

私は2つのテーブルを持っています、albumsそしてpictures...

picturesalbumsviaと関係がありfk_albumIDます。

今私がしようとしているのは、 からすべてを選択albumsし、同時にalbums...に関連する写真の数を数えることです

私は試しました: SELECT *, (SELECT COUNT(*) FROM pictures WHERE pictures.fk_albumID = albums.albumID) AS albumCount FROM pictures, albums

しかし、これはまず、画像がまったくない場合、結果を返しません...そして、カウントに従って結果を繰り返します。したがって、アルバムに 3 つの写真がある場合、リピーターにバインドすると、リストにアルバムが 3 回表示されます。

そして私は試しました: SELECT COUNT(albums.albumID) AS albumCount, albums.albumName, albums.albumID FROM albums INNER JOIN pictures ON pictures.fk_albumID = albums.albumID GROUP BY albums.albumID, albums.albuName

しかし、これは写真のあるアルバムしか表示しません...

4

5 に答える 5

2

でも、あなたは近かった。必要なのは、INNER JOIN から OUTER JOIN に移動することだけです

SELECT COUNT(billeder.album_id) AS AlbumSize, 
       albums.album_name, 
       albums.album_id 
  FROM albums 
 LEFT OUTER JOIN billeder 
              ON billeder.album_home = albums.album_id 
 GROUP BY albums.album_id, albums.album_name
于 2012-10-10T10:36:01.757 に答える
1

サブクエリを使用できます。

SELECT p.PicCount AS AlbumSize, 
  albums.album_name, 
  albums.album_id 
FROM albums a
INNER JOIN billeder b
  ON b.album_home = a.album_id 
LEFT JOIN 
(
  SELECT count(*) PicCount, fk_albumid
  FROM pictures
  GROUY BY fk_albumid
) p
  on a.album_id = p.fk_albumid
于 2012-10-10T10:21:50.000 に答える
1
SELECT t1.album_title, isnull(sum(flag),0) AS PicCount
FROM albums AS t1
LEFT JOIN
(
SELECT *, 1 AS Flag
FROM pictures) AS t2
ON t1.fk_albumID = t2.fk_albumID
GROUP BY t1.album_title

SQL フィドルへのリンク

于 2012-10-10T10:26:32.630 に答える
0
SELECT (SELECT COUNT(1)
        FROM billeder
        WHERE billeder.album_home = albums.album_id) albumCount,
       albums.album_name,
       albums.album_id
FROM albums
于 2012-10-10T10:19:34.550 に答える
0
select 
    AL.album_name, 
    AL.albumID, 
    (select count(*) from 
            ALBUMS AL1, 
            PICTURES PIC1 
     where  AL1.albumID = PIC1.albumID) as CNT_ALBUMID
from 
    ALBUMS AL

試してみてください

于 2012-10-10T10:32:20.040 に答える