我有查询:
SELECT `gigs`.*, COUNT(`signups`.`signupID`) AS `signupsPending` FROM `gigs` NATURAL JOIN `signups` WHERE (`signupStatus` = 4) GROUP BY `gigID`
那就是查询一个如下所示的数据库:
+-------+---------+------------+
| gigID | gigName | gigDate |
+-------+---------+------------+
| 1 | Foo | 01/01/2014 |
+-------+---------+------------+
| 2 | Bar | 16/01/2014 |
+-------+---------+------------+
+----------+-------+--------------+--------------+
| signupID | gigID | signedUserID | signupStatus |
+----------+-------+--------------+--------------+
| 1 | 1 | 1 | 1 |
+----------+-------+--------------+--------------+
| 2 | 1 | 2 | 4 |
+----------+-------+--------------+--------------+
| 3 | 1 | 3 | 2 |
+----------+-------+--------------+--------------+
| 4 | 2 | 1 | 2 |
+----------+-------+--------------+--------------+
但是当我执行上面的查询时,它只显示gigID = 1的行。如何更改上面的查询,以便它与行的其余部分显示0?
答案 0 :(得分:0)
使用LEFT OUTER JOIN而不是NATURAL JOIN。
SELECT `gigs`.*, COUNT(`signups`.`signupID`) AS `signupsPending`
FROM `gigs`
LEFT OUTER JOIN `signups`
WHERE (`signupStatus` = 4) GROUP BY `gigID`
答案 1 :(得分:0)
您想使用LEFT JOIN
(您可以为ANSI-92兼容性添加OUTER
)
SELECT
gig.*
, COUNT(sig.signupID) AS "signupsPending"
FROM gigs AS gig
LEFT JOIN signups AS sig ON (gig.gigID = sig.gigID)
WHERE sig.signupStatus = 4
GROUP BY gig.gigID
顺便说一句,我建议你不要使用NATURAL JOIN
因为它会带来一些风险
USING
语句)NATURAL
和标准JOIN
,则可能很难通过脚本自动执行查询答案 2 :(得分:0)
我一直在尝试OUTER JOIN,但这并没有产生任何结果,但我现在尝试过:
SELECT `gigs`.*, COUNT(`signups`.`signupID`) AS `signupsPending` FROM `gigs` LEFT JOIN `signups` ON `gigs`.`gigID` = `signups`.`gigID` AND `signupStatus` = 4 GROUP BY `gigID`
这很有效