sql >> データベース >  >> RDS >> Mysql

FirebirdからMySQLへのクエリの移行-[内部結合]サブクエリを選択します

    問題は、mySQLではcomma演算子の優先順位が低いことです> joinより 演算子、したがって、part.idのproduct inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid 結合はに評価されます part テーブルが式に結合されているため、エラーメッセージが表示されます。

    カンマ演算子を単純なjoinに置き換えます 演算子を使用して、結合条件をwhereから移動します onへの句 条項とすべてがうまくいくでしょう:

    ...
    FROM   vendor
           inner join vendorparts on vendor.id = vendorparts.vendorid
           inner join part on vendorparts.partid = part.id
           inner join product on product.partid = part.id
           INNER JOIN (SELECT vendorparts.partid,
                              Max(vendorparts.lastcost) AS Highestcost
                       FROM   vendorparts
                       GROUP  BY vendorparts.partid) AS highestcost
                   ON part.id = highestcost.partid
           INNER JOIN (SELECT vendorparts.partid,
                              Min(vendorparts.lastcost) AS Lowestcost
                       FROM   vendorparts
                       GROUP  BY vendorparts.partid) AS lowestcost
                   ON part.id = lowestcost.partid
    WHERE  vendorparts.lastcost <> 0 
    

    コンマ演算子と明示的な結合を組み合わせたクエリが他にもある場合は、MySQLで構文エラーがなかったとしても、異なる結果が生成される可能性があるため、それらをチェックする必要があります。



    1. Matlab から Microsoft SQL Server 2008 (MSSQL) に接続するには?

    2. PostgreSQLの階層合計

    3. DATE列にjava.sql.Timestampを渡すと、Oracleが非常に遅いのはなぜですか?

    4. ONは構文の一部です