0

私はクエリを持っています:

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 を表示するにはどうすればよいですか?

4

3 に答える 3

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`

そして、それはうまく機能しています

于 2013-03-15T16:46:17.467 に答える
0

NATURAL JOIN の代わりに LEFT OUTER JOIN を使用します。

SELECT `gigs`.*, COUNT(`signups`.`signupID`) AS `signupsPending` 
FROM `gigs` 
LEFT OUTER JOIN `signups` 
WHERE (`signupStatus` = 4) GROUP BY `gigID`
于 2013-03-15T16:39:50.417 に答える
0

使用したい( ANSI-92 互換性のためにLEFT JOIN追加できるもの)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異なる外部キーを使用して 2 つのテーブルを結合できます (ステートメントを追加できる場合でも)
  • データベースの存続期間中、テーブルにフィールド変更が追加される可能性があり、両方のテーブルが同じ名前の新しいフィールドを取得しないことを常に確認する必要があります
  • NATURALと標準の両方を使用する場合JOIN、スクリプトを使用してクエリを自動化するのは難しい場合があります
  • ...
于 2013-03-15T16:40:45.917 に答える