当我使用右联接时,我得到的结果与使用左联接或仅联接时相同。谁能告诉我我哪里出问题了?
我有3张桌子,如下所示:
语言
ID
代码,例如“ hu”,“ en”
language_default
ID
文本
language_translations
ID
lang_id(FK语言表中语言的ID)
default_lang_id(FK是language_default表中文本的ID)
文字(翻译)
当我执行以下查询时,我希望从language_translations表中获取所有匈牙利语翻译,并从language_default表中获取所有具有null值且没有匈牙利语翻译的文本字段。
SELECT `language_translations`.`text`
, `language_default`.`text`
FROM `languages`
, `language_translations`
RIGHT JOIN `language_default` ON `language_default`.`id` = `language_translations`.`default_lang_id`
WHERE `languages`.`code` = 'hu'
AND `languages`.`id` = `language_translations`.`lang_id`
相反,我仅从language_default表中获取文本,在tranlsation表中有该文本的翻译。我希望这种行为来自左联接或普通联接,而不是右联接。为什么我没有从langugage_defailt表中获取所有条目?
最佳答案
首先,您以错误的方式使用普通联接和权限联接的组合。您可以按照以下查询使用。
第二件事右连接意味着您将从右侧获取所有记录,并从左侧获取对应的记录,如果左侧没有对应的记录,则显示NULL。
左联接是相反的。
普通联接或逗号联接将仅提供公共行。
因此,如果表仅具有公共行,则所有联接将提供相同的结果。
SELECT
`language_translations`.`text` , `language_default`.`text`
FROM `languages` AS l
JOIN `language_translations` AS t
ON l.`id` = t.`lang_id` AND l.`code` = 'hu'
RIGHT JOIN `language_default` AS d
ON d.`id` = t.`default_lang_id`;
关于mysql - mysql右连接无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23218833/