首页 > 解决方案 > 左加入一个表,但也保留左表中的匹配条目

问题描述

我目前正在处理一些关于下面布局的表格。我们有一个产品表,其中包含带有英文名称的产品。我们还对产品进行了一些翻译,这些翻译保存在第二个表中translation。现在对于旧版本,我需要将英文名称与所有翻译一起获取。因此,如果我搜索,productId = 1我会期望得到这样的结果:

ProductId | english | translation
1         | Wood    | NULL
1         | Wood    | Holz
1         | Wood    | Bois

表格布局如下所示:

第一张表Product

ProductId |Name
1         | Wood
2         | Iron
3         | Copper
4         | Gold

第二张表Translation

TranslationId | Name    | fk_product | fk_anguage
1             | Holz    | 1          | 1
2             | Eisen   | 2          | 1
3             | Kupfer  | 3          | 1
4             | Bois    | 1          | 2

现在我的查询如下所示:

SELECT 
   ProductId, Product.Name AS english Translation.Name AS translation
FROM 
   Product
LEFT JOIN 
   Translation ON fk_product = ProductId

到目前为止,这有效,我得到了所有的翻译,但没有得到英文名称。是否可以用不同的语言检索所有三个名称?

标签: sql

解决方案


你想要UNION ALL吗?

SELECT p.ProductId, p.Name AS english t.Name AS translation
FROM Product p JOIN 
     Translation t
     ON t.fk_product = p.ProductId
UNION ALL
SELECT p.ProductId, p.Name, p.Name
FROM Product;

推荐阅读