簡體   English   中英

SQL空行和COUNT

[英]SQL null row and COUNT

我有一張桌子

id |  url | albumID
------------------
 1 | null |   1
 2 | null |   1
 3 | null |   2
 4 | null |   5

和評論表

id |  text   | imageID
------------------
 1 | 'xD'    |   1
 2 |  ':)'   |   1
 3 | ':P'    |   1
 4 | '(_!_)' |   2

我想獲取所有具有albumID = 1的圖像,以及具有與先前結果匹配的imageID的評論數。

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=1

我得到:

id |  comments
------------------
 1 |     3

可以,但是當我嘗試搜索不存在albumID的圖像時:

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3

我得到:

   id |  comments
------------------
 null |     0

我不想得到null的結果。 那么我的查詢出了什么問題?

編輯:

解決方案1

@cdaiga和@isaace提供,謝謝

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id;

解決方案2

我自己思考之后,但我不確定該解決方案的性能如何

SELECT images.id, 
  (
   SELECT COUNT(*) FROM comments WHERE comments.imageID=images.id 
  ) AS comment FROM images 
WHERE images.albumID=3

通常,當您運行時:

SELECT images.id FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;

結果是一個空集。 但是運行:

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;

返回一個空值,計數為零,因為計數不用作聚合函數。 為了獲得正確的結果,您必須通過添加group by子句將count用作聚合函數。

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id;

通常,當您運行時:

SELECT images.id FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;

結果是一個空集。 但是運行:

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;

返回一個空值,計數為零,因為計數未與聚合一起使用。 為了獲得正確的結果,您必須通過添加group by子句將count用作聚合函數。

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id;

如果添加GROUP BY則應該對其進行修復。

SELECT images.id, COUNT(comments.imageID) AS comments FROM images 
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id

在更高版本的mysql ,如果沒有GROUP BY將無法運行查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM