2011-08-16 40 views
3

我想在sql中連接兩個表並獲得第二個表的計數。第二張表有幾列,其中三列一起作爲主鍵。我開始查詢爲:如何在連接表具有多個列的組合作爲其主鍵時選擇連接表的COUNT()?

SELECT times.*, COUNT(paylog.*) AS `total` 
FROM times 
LEFT JOIN paylog 
ON paylog.type = 'work' 
AND paylog.targetID = times.id 

我得到了丁當作響的使用計數表名()參數:

您的SQL語法錯誤;檢查手冊中 對應於你的MySQL服務器版本正確的語法使用 接近「*)AS total 距離時代 LEFT JOIN paylog」在行1

如果有一個唯一的列paylog表,我可以按照這裏給出的建議:Can I count number of rows in joined table?但事實並非如此。我如何選擇paylog表中所有連接行的計數?我需要讓它成爲一個連接,因爲它目前使用子查詢獲得計數,並且使它有點慢。

回答

1

計數將只返回列中非空值的數量或結果集中特定情況下count(*)的行數。換句話說,count(paylog.*)是無效的SQL。

您不需要paylog表中的唯一列來執行有效計數,任何列都會執行。如果連接成功,則會增加計數,否則該列的值將爲空,並且計數保持不變。

如果您嘗試獲取paylog中每行的鏈接行數,那麼您還需要一個group by times.id子句。