1

同じ列()を共有する2つのテーブルCがありますが、SQLでエラーが発生したと表示されます

これが最初のクエリの最初のテーブルです。

SELECT   E.C AS C, 
         COUNT(C) AS CC
FROM     E
GROUP BY E.C

そして、これが2番目のクエリです。

SELECT   E.C AS C, 
         COUNT(C) AS Num
FROM     E, G
WHERE    E.G = G.L
         AND G.G <
                    (SELECT min(G.G) 
                     FROM   G
                     WHERE  G.L = "BLAH")

GROUP BY E.C

そこで、この2つを間に入れて単純に組み合わせてみJOINました。ただし、同じ列を共有している場合でも、これは結合されませんC。構文エラーがあると言っているだけです。なにが問題ですか?そして、どうすれば修正できますか?別々に実行すると、列を使用して正しい出力が生成されることを確認しましたC

以下は総JOIN実行量です

(SELECT   E.C AS C, 
             COUNT(C) AS CC
    FROM     E
    GROUP BY E.C)

JOIN

(SELECT   E.C AS C, 
             COUNT(C) AS Num
    FROM     E, G
    WHERE    E.G = G.L
             AND G.G <
                        (SELECT min(G.G) 
                         FROM   G
                         WHERE  G.L = "BLAH")

    GROUP BY E.C)

エラーはエラーコード1064、SQL状態42000です。SQL構文にエラーがあります。'JOINの近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

(SELECT   E.C AS C, 
         COUNT(C) AS Num' at line 6
Line 1, column 1
4

2 に答える 2

1

構文エラーは表示されませんでしたが、次の行に関係していると思います。

COUNT(C) AS CC

両方のテーブルに列があるCため、クエリはどちらのテーブルから値を返すかを認識しません。テーブル名またはエイリアスを前に付ける必要があります。

この行は最初のクエリで機能します。これは、と呼ばれる列が1つしかないためC、2つある場合は、どちらを返すかを指定する必要があります。

編集に基づいて、サブクエリのエイリアスと結合の条件が欠落しています。

select t1.C, t1.cc, t2.num
from 
(
    SELECT   E.C AS C, 
             COUNT(C) AS CC
    FROM     E
    GROUP BY E.C
) t1  -- added alias
INNER JOIN
(
    SELECT   E.C AS C, 
             COUNT(E.C) AS Num  -- added table name, since column c exists in both tables
    FROM    E 
    JOIN    G
        ON E.G = G.L
    WHERE  G.G < (SELECT min(G.G) 
                   FROM   G
                   WHERE  G.L = "BLAH")
    GROUP BY E.C
) t2  -- added alias
    on t1.C = t2.C  -- added on clause
于 2012-10-24T22:16:02.873 に答える
1

これを試して:

select Z.C /*other*/ 
from (SELECT   E.C AS C, 
               COUNT(E.C) AS CC
      FROM     E
      GROUP BY E.C) Z

JOIN (SELECT   E.C AS C, 
             COUNT(E.C) AS Num
       FROM     E, G
       WHERE    E.G = G.L
                AND G.G < (SELECT min(G.G) 
                           FROM   G
                          WHERE  G.L = "BLAH")    
       GROUP BY E.C) Y on Y.C = Z.C
于 2012-10-24T22:19:47.803 に答える