MySQL 2离开了连接,没有返回数据

时间:2013-01-29 15:27:07

标签: mysql left-join

我使用以下sql来获取我要翻译的一些键:

SELECT * FROM translate_keys 

LEFT JOIN translations 

ON translate_keys.id = translations.translate_key_id 

LEFT JOIN  languages 

ON languages.id = translations.language_id 

WHERE languages.is_default = 1;

如果某个键的翻译为空,我将无法获得任何结果(语言包含内容)!我理解这是因为语言与翻译无关。我能做什么?我以为左连接就足够了!

提前感谢yoy

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题(语言包含内容),您就会加入错误的方向。您希望语言表成为主表。试试这个:

SELECT * 
FROM languages  
  LEFT JOIN translations ON languages.id = translations.language_id 
  LEFT JOIN translate_keys ON translate_keys.id = translations.translate_key_id 
WHERE languages.is_default = 1;

或者,如果您尝试返回所有密钥并且没有收到任何结果,那是因为您的WHERE标准 - 正如@Oswald正确指出的那样,将其移至您的JOIN并且您应该获得记录(显然没有翻译或语言):

SELECT * 
FROM translate_keys 
   LEFT JOIN translations ON translate_keys.id = translations.translate_key_id 
   LEFT JOIN  languages ON languages.id = translations.language_id AND languages.is_default = 1;
祝你好运。

答案 1 :(得分:1)

问题是WHERE条件languages.is_default = 1。这会消除左连接添加的所有虚拟记录,因为如果不存在转换,languages.is_defaultNULL