2011-06-28 14 views
0

私は2つのテーブルを内部結合する必要がある3つのテーブルを結合し、次に内部結合を別の結合で内部結合するクエリを作成しました。次のように別のサブクエリを含む内部結合内のサブクエリ

クエリは次のとおりです。

SELECT R.ID, 
     R.Title, 
     R.Requirement_Text, 
     R.Req_Owner, 
     D.desname, 
     D.team, 
     D.stage, 
     D.comm 
FROM Req R 
     LEFT JOIN 
     (
      SELECT d1.ID AS 'id', 
        d1.designername AS 'desname', 
        d1.teamname AS 'team', 
        s.stage AS 'stage', 
        s.comments As 'comm' 
      FROM descomments d1 
        LEFT JOIN stagecomments s ON d1.ID = s.ID 
               AND d1.designername = s.designername 
     ) D ON R.ID = D.id 
WHERE R.ProjectID = 'STE 11.2' 
ORDER BY R.Priority 

しかし、私は次のエラーになっています:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT d1.ID AS 'id',d1.designername AS 'desname',d1.teamname A 

答えて

1

あなたが最初の左後の「descommentsは」参加する必要はありません..あなたが実際にあなたのサブ結合の結果であるD、に参加している。..

SELECT 
    R.ID, 
    R.Title, 
    R.Requirement_Text, 
    R.Req_Owner, 
    D.designername, 
    D.teamname, 
    s.stage, 
    s.comments 
FROM Req R LEFT JOIN descomments D ON R.ID=D.id 
LEFT JOIN stagecomments s ON D.ID=s.ID AND D.designername=s.designername 
WHERE 
    R.ProjectID='STE 11.2' 
ORDER BY R.Priority 
+0

クエリを変更しても同じエラーが発生します – user662175

+0

エイリアスの周りの引用符を削除するとどうなりますか?だからAS名にAS 'desname'を変更する – StevieG

+0

文字列query1 = "SELECT R.ID、R.Title、R.Requirement_Text、R.Req_Owner、D.desname、D.team、D.stage、D.comm、R。 PD.date、R.EXE_GO、R.Est_Delivery FROM Requirements AS R LEFT JOIN(SELECT d1.ID AS id、d1.designername AS desname、d1.teamname ASチーム、s.stage ASステージ、s.comments AS commからAS d1 D.ID = s.IDおよびd1.designername = s.designername)AS D ON R.ID = D.id WHERE R.ProjectID = 'STE 11.2' ORDER BY R.Priority "; – user662175

0

を `私はこれが解決策であるわからないんだけど、MySQLはバッククォートを使用せず、ない?このよう

SELECT R.ID, 
     R.Title, 
     R.Requirement_Text, 
     R.Req_Owner, 
     D.desname, 
     D.team, 
     D.stage, 
     D.comm 
FROM Req R 
     LEFT JOIN 
     (
      SELECT d1.ID AS `id`, 
        d1.designername AS `desname`, 
        d1.teamname AS `team`, 
        s.stage AS `stage`, 
        s.comments As `comm` 
      FROM descomments d1 
        LEFT JOIN stagecomments s ON d1.ID = s.ID 
               AND d1.designername = s.designername 
     ) D ON R.ID = D.id 
WHERE R.ProjectID = 'STE 11.2' 
ORDER BY R.Priority 
+0

を私はerrorcom.mysql.jdbc.exceptions.MySQLSyntaxErrorExceptionを取得していますそれらを削除しても:あなたのSQL構文でエラーが発生しています。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックして、正しい構文を使用してください。 'SELECT d1.ID AS id、d1.designername AS desname、d1.teamname AS te – user662175

+0

'をすべて 'with'に置き換えることを意味します。 –

+0

同じエラー:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:SQL構文にエラーがあります。 'SELECT d1.ID AS 'id'、d1.designername AS' desname'、d1.teamname A – user662175

0

私が正しく、次のようにクエリを読み込み、その中に表示されるJava文字列の区切り文字と連結文字を取り除かれている場合:

SELECT 
    R.ID, 
    R.Title, 
    R.Requirement_Text, 
    R.Req_Owner, 
    D.desname, 
    D.team, 
    D.stage, 
    D.comm 
FROM 
    Req R 
    LEFT JOIN descomments ON 
     (
      SELECT 
       d1.ID AS 'id', 
       d1.designername AS 'desname', 
       d1.teamname AS 'team', 
       s.stage AS 'stage', 
       s.comments As 'comm' 
      FROM 
       descomments d1 
       LEFT JOIN stagecomments s ON 
        d1.ID = s.ID AND 
        d1.designername = s.designername 
     ) D ON R.ID = D.id 
WHERE 
    R.ProjectID = 'STE 11.2' 
ORDER BY 
    R.Priority 

descomments ONビットをした後、 LEFT JOINは誤りです。次のことを試してみてください。

SELECT 
    R.ID, 
    R.Title, 
    R.Requirement_Text, 
    R.Req_Owner, 
    D.desname, 
    D.team, 
    D.stage, 
    D.comm 
FROM 
    Req AS R 
    LEFT JOIN (
     SELECT 
      d1.ID AS 'id', 
      d1.designername AS 'desname', 
      d1.teamname AS 'team', 
      s.stage AS 'stage', 
      s.comments AS 'comm' 
     FROM 
      descomments AS d1 
      LEFT JOIN stagecomments AS s ON 
       d1.ID = s.ID AND 
       d1.designername = s.designername 
    ) AS D ON R.ID = D.id 
WHERE 
    R.ProjectID = 'STE 11.2' 
ORDER BY 
    R.Priority 
+0

クエリを変更しても同じエラーが発生しています – user662175

+0

正常に動作しない場合は、これを答えとしてマークするのはなぜですか? –

+0

問題はクエリではなくMySQLバージョン – user662175

0

StevieGの書き直しクエリから始まるstageCommentsの値はクエリで使用されることはありません。したがって、重複しているように見えますが、クエリの速度が大幅に低下します。以下は、はるかに速く、望ましい結果を与える必要があります:

SELECT 
    R.ID, 
    R.Title, 
    R.Requirement_Text, 
    R.Req_Owner, 
    D.desname, 
    D.team, 
    D.stage, 
    D.comm 
FROM Req R LEFT JOIN descomments D ON R.ID=D.id 
WHERE 
    R.ProjectID='STE 11.2' 
ORDER BY R.Priority; 
+2

D.stageとD.commはともかく、ステガマメ... – StevieG

+0

あなたは正しいです – symcbean

関連する問題