簡體   English   中英

在MySQL中使用右手約束創建左外部聯接

[英]Creating a left outer join in MySQL with right-hand constraints

根據https://stackoverflow.com/questions/3264227/relations-with-multiple-keys-in-doctrine-1-2 ,我有兩個表(由於無法在Doctrine中使用)我試圖以MySQL視圖的身份加入:

部分:

  • PART_ID
  • PRODUCT_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時才有效聯接

我有一個有效的查詢:

從左外部聯接中選擇*(從part_translation WHERE language_id = 1和part_short_code!=''中選擇*)作為part_data_uk使用(part_type_id,part_short_code)

但是a)速度很慢(可能是由於子查詢所致),b)我無法將其變成視圖,因為出現錯誤“#1349-視圖的SELECT在FROM子句中包含子查詢”

我無法弄清楚如何在不使聯接充當內部聯接並熟練掌握右側為空的所有行的情況下向右側表添加約束。

誰能告訴我如何以擺脫子查詢並使其在視圖中可用的方式優化/改進此查詢?

使用MySQL 5.0.45,FWIW。

謝謝,理查德

你可以把相當多的東西在日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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM