0

私のウェブサイトのページの中にたくさんの内部結合がある大きなクエリがあります。左外部結合制限1を適用したいのですが、それをSQLに入れると、エラーが発生します。

これは私のクエリのごく一部であり、合計ではありません。このクエリは一部にすぎず、IS N'T FINISH:

SELECT * FROM products 
               LEFT OUTER JOIN  (origins 
                        LEFT OUTER JOIN  origin_aliases ON origin_aliases.origin_id = origins.id 
                        AND origin_aliases.language = '$lang'
                        LEFT OUTER JOIN  (diets LEFT OUTER JOIN  diet_aliases ON diet_aliases.diet_id = diets.id AND diet_aliases.language = '$lang') 
                        ON origins.diet_id = diets.id) 
                ON products.origin_id = origins.id
                LEFT OUTER JOIN  (product_aliases 
                        LEFT OUTER JOIN  (users as users1
                            LEFT OUTER JOIN  profiles as profiles1 ON profiles1.user_id = users1.id
                            LEFT OUTER JOIN  user_options as user_options1 ON user_options1.user_id = users1.id 
                            LEFT OUTER JOIN  avatars as avatars1 ON avatars1.user_id = users1.id
                        ) 
                        ON  product_aliases.user_id =users1.id
                        LEFT OUTER JOIN  (users as users2
                            LEFT OUTER JOIN  profiles as profiles2 ON profiles2.user_id = users2.id
                            LEFT OUTER JOIN  user_options as user_options2 ON user_options2.user_id = users2.id
                            LEFT OUTER JOIN  avatars as avatars2 ON avatars2.user_id = users2.id 
                        )  
                        ON  product_aliases.edit_user_id = users2.id)
                ON product_aliases.product_id = products.id  

....。

たとえば、可能になった後、原点の左外側結合に制限1を適用したい ON 'products.origin_id'='origins.id'ですか?これどうやってするの?条件制限1の後に入れようとしましたが、エラーが発生します

構文エラーまたはアクセス違反:1064SQL構文にエラーがあります。正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

4

2 に答える 2

2

サブクエリを使用LIMITして、で使用できJOINます。

... LEFT JOIN (SELECT column1, column2 FROM table LIMIT 2) ON ...

また、コメントで述べられているように、テーブルを含む列名を一重引用符で囲まないでください。

于 2013-01-27T16:35:39.500 に答える
1

書かれているように、あなたの例はいっぱいかエラーです。派生テーブルにはSELECT句がなく、テーブルと列の参照を引用しているため、originsorigin_aliasesなどの名前がテーブルなのかエイリアスなのかが明確ではありません。これらは構文エラーです。

これらを修正したら、LIMIT式をクエリ全体または任意の派生テーブルに追加できます。これが私の最善の推測です:

SELECT * 
FROM products 
LEFT OUTER JOIN ( 
   select *
   from   origins 
   LEFT OUTER JOIN origin_aliases 
   ON     origin_aliases.origin_id = origins.id 
      AND origin_aliases.language = '$lang' 
   LEFT OUTER JOIN ( 
      select *
      from   diets 
      LEFT OUTER JOIN  diet_aliases 
      ON     diet_aliases.diet_id = diets.id 
         AND diet_aliases.language = '$lang'
      ) d
   ON origins.diet_id=d.id

   LIMIT 1
   ) a
ON products.origin_id=a.id

2つのテーブルエイリアス(ab)を使用することを選択します。そして、originsorigin_aliasesdietsはテーブルだと思います。使用しないでくださいSELECT *。各派生テーブルおよびメインSELECT句から必要な列名を指定します。

于 2013-01-27T18:40:45.220 に答える