sql - 左加入一个表,但也保留左表中的匹配条目
问题描述
我目前正在处理一些关于下面布局的表格。我们有一个产品表,其中包含带有英文名称的产品。我们还对产品进行了一些翻译,这些翻译保存在第二个表中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
到目前为止,这有效,我得到了所有的翻译,但没有得到英文名称。是否可以用不同的语言检索所有三个名称?
解决方案
你想要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;
推荐阅读
- html - Css 计算标记和伪元素之前的输出差异
- javafx - 如何使用 JavaFX 中的循环在 ImageView 中设置图像?
- python - 为什么python中的变量“if __name__ ==”__main__”是全局变量?
- json - fromJson: 输入'IntetnalLinkedHashMap
' 不是 'Recording' 的子类型 - javascript - 如何在 React Native 中居中表单元素
- javascript - 为什么使用 3D 安全信用卡时未激活 Stripe 订阅?
- java - 使用 Gluon 客户端插件构建 APK:RuntimeException:初始化 QuantumRenderer 时出错:找不到合适的管道
- node.js - 为什么我无法连接到我的数据库?
- firebase - 我有这段代码,但似乎有问题
- java - 如何使 Java 程序在运行时生成另一个 Java 应用程序