2

根据https://stackoverflow.com/questions/3264227/relations-with-multiple-keys-in-doctrine-1-2,我有两张表(因为我无法让它在 Doctrine 中工作)我' m 试图以 MySQL 视图的形式加入:

部分:

  • part_id
  • product_id
  • part_type_id
  • part_short_code
  • ...

部分翻译:

  • part_type_id
  • part_short_code
  • 语言标识
  • 国际化名称
  • ...

关于 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 - View's SELECT contains a subquery in the FROM 子句”

我无法弄清楚如何将约束添加到右侧表而不导致联接充当内部联接并处理右侧为空的所有行。

谁能告诉我如何优化/改进此查询以摆脱子查询并使其在视图中可用?

使用 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 回答