0

私はPHP/MySQLアプリケーションを持っていますが、前の開発者がデータベースでこれを行っています

tbl_cat columns:

cat_id | cat_name

tbl_products columns have cat_id assigned:

category_1 | category_2 | category_3

私がする必要があるのは、(tbl_cat.cat_nameなど)に割り当てることですcategory_1category_2

私はasここが間違っていることを知っていますが、それを示すためだけにこれに似たものでなければなりません:

SELECT * FROM tbl_products 
LEFT JOIN tbl_cat 
ON category_1=cat_id AS cat_1 
AND category_2=cat_id AS cat_2 
AND category_3=cat_id AS cat_3
4

1 に答える 1

0

joinを使用する場合の通常のselect構文は次のとおりです。

SELECT        
      table_alias_1.column_1 AS column_alias_1,
      table_alias_2.column_2 AS column_alias_2,
      table_alias_3.column_3 AS column_alias_3
FROM  table_1 AS table_alias_1
LEFT JOIN table_2 AS table_alias_2 
     ON table_alias_1.column_1 = table_alias_2.column_2
LEFT JOIN table_3 AS table_alias_3
     ON table_alias_2.column_3 = table_alias_3.column_3;

テーブルをそれ自体に結合できるエイリアスが異なる限り、table_1がtable_2と同じであるかどうかは関係ありません。

selectステートメント内で割り当てを宣言することはできません**。selectステートメント内の=符号は、代入演算子ではなく比較演算子として解釈されます。

**このルールには例外があります。これは、ANSI-SQLの一部ではないMySQLが提供する非標準の拡張機能ですが、これは、選択の範囲外で使用される値変数を割り当てるために使用されます。代入演算子は;ではあり:=ません。=これは基本的にANSISQL標準の代替ですSELECT ... INTO ...

于 2012-08-30T11:44:29.843 に答える