2010-07-23 39 views
1

根據https://stackoverflow.com/questions/3264227/relations-with-multiple-keys-in-doctrine-1-2,我有兩個表(因爲我無法在Doctrine中工作)我試圖以MySQL視圖的形式加入:在右側約束下在MySQL中創建左外連接

部分:

  • PART_ID
  • PRODUCT_ID
  • part_type_id
  • part_short_code
  • ...

part_translation:對part_type_id約束和part_short

  • part_type_id
  • part_short_code
  • LANGUAGE_ID
  • internationalised_name
  • ...

_code必須在表中匹配。

這是由事實複雜,因爲:

  • 右手錶(part_translation)可能沒有相應的行(因此左連接)
  • 右邊的表僅適用於加入時part_short_code = '' 和LANGUAGE_ID = 1

我有一個工作查詢:

SELECT * FROM部分LEFT OUTER JOIN (SELECT * FROM part_translation WHERE LANGUAGE_ID = 1 AND part_short_code!= '')作爲part_data_uk 使用(part_type_id,part_short_code)

但)它的速度慢(可能是由於子查詢)和b)我無法打開它進入一個視圖,因爲我得到的錯誤「#1349 - 視圖的SELECT包含FROM子句中的子查詢」

我不能解決如何將約束添加到右手邊表而不會導致聯接行爲作爲內部連接並且處理右側爲空的所有行。

任何人都可以告訴我如何優化/改進這種查詢,以擺脫子查詢,並使其在視圖中可用?

使用MySQL 5.0.45,FWIW。

感謝, 理查德

回答

3

你可以把在日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 
) 
+0

你知道我會發誓,沒有工作上次我試圖...一定錯了它。謝謝! – Parsingphase 2010-07-23 10:57:09