2

私は次の声明に出くわし、SQLそれが有効かどうか疑問に思っていました:

SELECT COUNT(*) 
    FROM 
        registration_waitinglist, 
        registration_registrationprofile 
    WHERE 
        registration_registrationprofile.activation_key = "ALREADY_ACTIVATED"

カンマで区切られた 2 つのテーブルは何を意味していますか?

4

3 に答える 3

7

SELECT複数のテーブルからデータを取得する場合、Cartesian Productこれらのテーブルからすべてのタプルを取得します。次のように説明できます。

デカルト積の図

これは、最初のテーブルの各行を、2 番目のテーブルのすべての行とペアにして取得することを意味します。ほとんどの場合、それはあなたが望むものではありません。本当に必要な場合は、次のCROSS JOIN表記法を使用する方が明確です。

SELECT * FROM A CROSS JOIN B;
于 2012-04-11T19:22:02.307 に答える
2

このコンテキストでは、registration_waitinglist のすべての行を registration_registrationprofile のすべての行に結合することを意味します。

デカルト結合と呼ばれる

于 2012-04-11T19:19:35.427 に答える
1

そのクエリは「構文的に」正しいため、実行されます。クエリが返すのは、registration_waitinglist x registration_registrationprofile のすべての行の積全体です。たとえば、待機リストに 2 行、プロファイルに 3 行ある場合、6 行が返されます。

実際問題として、これはほとんど常に論理エラーであり、意図したものではありません。まれな例外を除いて、where 句に結合基準または基準のいずれかが必要です。

于 2012-04-11T19:21:36.633 に答える