0

私が使用している 2 つのテーブルは次のとおりです: http://pastie.org/4539541

テーブル products_options_values は参照テーブルであり、products_images テーブルは参照テーブルと比較したいテーブルです。

私が使用しているクエリは次のとおりです。

select
products_options_values_name
from 
products_options_values as pov
inner join
products_images as img
on pov.products_options_values_id = img.color_id
where img.products_id = '426'

これは 1 つのレコードのみを返しますが、このクエリを実行すると:

select color_id from products_images where products_id = '426'

2 つのレコードを返します。

クエリが間違っていると確信していますが、他にどのようにすればよいかわかりません。products_images の color_id 名と products_options_values の products_options_values_id は同じ列名である必要があることはわかっていますが、作業中のアプリケーションで大量のエラーが発生するため、変更できません。

どんな助けでも素晴らしいでしょう、ありがとう

4

2 に答える 2

0

COALESCEで右結合を使用すると役立ちます。

于 2012-08-17T20:28:18.797 に答える
0

私があなたにフィードバックを与えたいいくつかのこと:

  1. リレーショナルデータベースとなるはずのMyISAMテーブルを使用しています。MyISAMは、データベースの参照整合性を保護する外部キーを介した関係をサポートしていません。外部キーがないと、他のテーブルを参照するテーブル(結合テーブルの場合)がデータベースの実際の値を反映することを保証できません。代わりにInnodbを使用してください。
  2. 数値には引用符を使用しないでください。「1」は文字1を意味し、整数のように1ではありません。MySQLは一般的にこれについて寛大ですが、それでも正しくありません。
  3. MyISAMにはテーブルレベルのロックしかありません。ロックを必要とする操作は、書き込みのためにテーブル全体をロックします。これにより、同時実行の問題が発生します。
  4. カラーIDは、色を列挙する別のテーブルを参照する必要があり、カラーID列は、それを反映する整数である必要があります。
  5. 各商品画像を1色のみにする必要がある場合は、一意の識別子を付ける必要があります。
  6. where句では、意味するテーブルのproducts_id列を指定する必要があります。
于 2012-08-17T20:28:50.373 に答える