0

Ubuntu マシン上の mysql 5.1.41 環境での SQL クエリで奇妙な状況に直面しています。

コードは次のとおりです

SELECT spedizione0_.idspedizione,
    spedizione0_.*,
    (
        SELECT COUNT(n.idnegozio)
        FROM negozio n
        LEFT JOIN confezione c
            ON n.idnegozio = c.idnegozio
                AND c.idspedizione = spedizione0_.idspedizione
        WHERE n.datainizio <= spedizione0_.dataspedizione
            AND n.datafine >= spedizione0_.dataspedizione
            OR c.idspedizione != 0
        ) AS formula5_
FROM orocashgenerico.spedizione spedizione0_
ORDER BY spedizione0_.dataspedizione DESC

この場合、エラーは次のように表示されます: [Err] 1054 - 不明な列 'spedizione0_.idspedizione' in 'on clause'

このクエリを実行する唯一の方法は、.. on n.idnegozio=c.idnegozio and c.idspedizione=spedizione0_.idspedizione を on n.idnegozio=c.idnegozio and c.idspedizione=12 に変更することです。

私にとって最も奇妙なことは、 and 条件を where 句に移動すると、クエリが正しく実行されますが、もちろん、結果は例外ではありません。

私の質問は、どこに問題があるのですか?
MySQLのバージョンに何か関係がありますか?

4

2 に答える 2

1

spedizione0_サブクエリのスコープで が見つからないためです。これを試して、

SELECT  spedizione0_.idspedizione,                     // add additionl columns
        COUNT(n.idnegozio) AS formula5_                
FROM    spedizione spedizione0_
        LEFT JOIN confezione c
            ON c.idspedizion = spedizione0_.idspedizione
        LEFT JOIN negozio n
            ON n.idnegozio = c.idnegozio
WHERE   (
            n.datainizio <= spedizione0_.dataspedizione AND 
            n.datafine >= spedizione0_.dataspedizione
        )
            OR c.idspedizione != 0
GROUP By spedizione0_.idspedizione
ORDER BY spedizione0_.dataspedizione DESC
于 2012-09-07T08:42:49.167 に答える
0

ご覧のとおり、ここでは間違った構文を使用しています。左外部結合を使用する場合、ON句で複数の条件を指定することはできません。あなたの場合、エラーを出している3番目のテーブルを結合するには、そのON句の後にもう1つのLeftjoin句を使用する必要があります。

于 2012-09-07T08:43:17.793 に答える