2

https://stackoverflow.com/questions/3264227/relations-with-multiple-keys-in-doctrine-1-2によると、私は2つのテーブルを持っています(Doctrineで動作させることができないため) m MySQLビューとして参加しようとしています:

部:

  • part_id
  • 製品番号
  • part_type_id
  • part_short_code
  • ..。

part_translation:

  • part_type_id
  • part_short_code
  • language_id
  • internationalised_name
  • ..。

part_type_idとpart_short_codeがテーブル間で一致する必要があるという制約について。

これは、次の事実によって複雑になります。

  • 右側のテーブル(part_translation)には、対応する行がない場合があります(したがって、左側の結合)
  • 右側のテーブルは、part_short_code!=''およびlanguage_id=1の場合にのみ結合できます。

動作するクエリがあります:

SELECT * from part LEFT OUTER JOIN(SELECT * FROM part_translation WHERE language_id = 1 AND part_short_code!='')as part_data_uk USING(part_type_id、part_short_code)

しかし、a)遅い(おそらくサブクエリが原因です)b)「#1349-ビューのSELECTのFROM句にサブクエリが含まれています」というエラーが表示されるため、ビューに変換できません

結合を内部結合として機能させ、右側がnullであるすべての行をスキルアップせずに、右側のテーブルに制約を追加する方法を他に理解することはできません。

サブクエリを削除してビューで使用できるようにする方法で、このクエリを最適化/改善する方法を教えてもらえますか?

MySQL 5.0.45、FWIWを使用します。

ありがとう、リチャード

4

1 に答える 1

4

あなたはこの部分にほとんど何でも入れることができますON。きれいな光景ではありませんが、それはうまくいく可能性があります:

SELECT * FROM `part` `p` LEFT JOIN `part_translation` `t` ON (
    `p`.`part_type_id` = `t`.`part_type_id`
    AND `p`.`part_short_code` = `t`.`part_short_code`
    AND `t`.`part_short_code` != ""
    AND `t`.`language_id` = 1
)
于 2010-07-23T10:50:28.860 に答える