我有两个表,一个用于所有食物,其中包含食物id、默认名称和其他食物值。
另一个表用于食品名称翻译,其中包含食品id、语言id、翻译。
我想要做的是通过食品id在这些表之间进行连接,以获得例如食品id =5和西班牙语语言id =1的翻译。我是这样做的:
SELECT *
FROM Foods
INNER JOIN FoodNameTranslations USING(Food_ID)
WHERE Food_ID = 5
AND Language_ID = 1
现在,如果'FoodNameTranslations‘表没有Food_ID 5和Language 1的翻译怎么办?然后,我想简单地从'Foods‘表(包含缺省名称)中获得食品id =5的食品行。
我怎么才能做一个这样的查询呢?谢谢!
发布于 2020-02-29 04:39:43
您将执行左连接,并将语言ID放入连接条件中。
SELECT
COALESCE(t.TranslatedName, f.DefaultName) FoodName
FROM
Foods f
LEFT JOIN FoodNameTranslations t ON t.Food_ID = f.Food_ID AND t.Language_ID = 1
WHERE
f.Food_ID = 5
发布于 2020-02-29 04:39:12
您可以通过更改联接条件来执行此操作:
INNER JOIN根据提供的on子句获取两个表之间共有的所有记录。
LEFT JOIN获取左侧链接中的所有记录和右侧表中的相关记录,但如果您从右侧表中选择了一些列,如果没有相关记录,则这些列将包含NULL。
RIGHT JOIN与上面类似,但会获取右表中的所有记录。
FULL JOIN从两个表中获取所有记录,并在相对表中不存在相关记录的列中放置NULL。
尝试使用LEFT JOIN而不是INNER JOIN,您的查询将如下所示: SELECT * FROM Foods LEFT JOIN FoodNameTranslations USING( Food_ID ) WHERE Food_ID=5 FoodNameTranslations Language_ID =1
https://stackoverflow.com/questions/60458721
复制相似问题