【发布时间】:2020-10-11 10:33:34
【问题描述】:
我有“products”和“product_translations”表。 “product_translations”表有: id、product_id、locale、name 字段。
现在我想选择这样的产品和翻译:
SELECT * FROM products AS P
LEFT JOIN product_trs Ptr on P.id = Ptr.product_id
WHERE locale = 'fr'
但问题是,如果产品没有翻译(但)这些产品不会被退回。
例如,假设我的 product_translations 包含这些行:
id pr_id locale name
------------------------------
1 1 'en' 'product 1'
2 1 'fr' 'produit 1'
3 2 'en' 'product 2'
现在如果我选择
WHERE locale = 'en'
如果我运行查询,我将得到 2 行:
WHERE locale = 'fr'
我会得到一排
我想总是得到 2 行。即使我没有翻译。我该怎么做?
【问题讨论】:
-
不完整 --
locale在哪个表中? -
@RickJames in product_trs(产品翻译)
-
那么,真的不是
LEFT加入吗? -
@RickJames,为什么?
-
LEFT暗示“右”表中可能有一行。WHERE locale = 'fr'表示必须有一行(并且应该具有该值)。我(例如)需要分析查询。 (绝不是你唯一一个虚假地使用LEFT的人。)戈登的回答正确地使用了LEFT。这是ON和WHERE行为不同的简单示例。 (在许多情况下,你在哪个地方设置条件并不重要。)
标签: mysql sql database-design