MYSQL加入列但在不存在的行上返回NULL

时间:2015-01-08 11:22:42

标签: mysql join

我需要一些帮助,因为我无法理解。

我有两张桌子

食谱 专栏:

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

2 个答案:

答案 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;