我需要一些帮助,因为我无法理解。
我有两张桌子
食谱 专栏:
ID, Recipe_name, Instructions
表格翻译 专栏:
ID, RecipeID, Translation, Country_ID
我尝试实现的是当用户查找食谱并且用户想要用自己的语言(法国或其他)时,MYSQL将离开(或右)加入翻译文本。如果发现 NO TRANSLATED 文本,则应返回 NULL
我试过了:
SELECT Recipes.* , Translations.Translation FROM Recipes
INNER JOIN Translations.Translation
ON Recipes.ID = Translations.RecipeID
WHERE Recipes.ID = 999 AND COALESCE(Translations.Country_ID, '') != '13'
Limit 1
Recipes.ID = 999 <-
是存储在dbase中的配方
Translations.Translation = 13 <-
国家/地区ID,在本例中为法国
上面的语句返回,因为它似乎是一个随机翻译的文本,我只需要13(法国),如果没有翻译文本,我希望它返回NULL。
提前致谢。
编辑 - 使用表格:
**Table Recipes
|ID | Recipe_name | Instructions
----+--------------+-------------
| 1 | Tasty Dish | 1 spoon of sugar
| 2 | Chicken | 1 chicken
** Table Translations
|ID | Recipe_ID | Translation | Country_ID
----+------------+---------------------+-----------
| 1 | 1 | 1 cuillère de sucre | 13 (france)
| 2 | 1 | 1 Lepel Suiker | 11 (dutch)
另一种没有法语翻译的场景:
**Table Recipes
|ID | Recipe_name | Instructions
----+--------------+-------------
| 1 | Tasty Dish | 1 spoon of sugar
| 2 | Chicken | 1 chicken
** Table Translations
|ID | Recipe_ID | Translation | Country_ID
----+------------+---------------------+-----------
| 2 | 1 | 1 Lepel Suiker | 11 (dutch)
MYSQL仍应添加列TRANSLATION但填充NULL
答案 0 :(得分:0)
尝试左连接。
SELECT Recipes.* , Translations.Translation FROM Recipes
LEFT JOIN Translations
ON Recipes.ID = Translations.RecipeID AND COALESCE(Translations.Translation, '') != '13'
WHERE Recipes.ID = 999
Limit 1
答案 1 :(得分:0)
您的查询似乎有点困惑。您说您想使用外部联接(左侧或右侧),但您使用内部联接。只需使用外连接,查询就是:
select r.* , t.translation
from recipes r
left join translations t on t.recipeid = r.id and t.country_id = 13
where r.id = 999;