当我使用右联接时,我得到的结果与使用左联接或仅联接时相同。谁能告诉我我哪里出问题了?

我有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/

10-10 00:52