当前查询:
SELECT
a.id,
IFNULL(c.title, b.title) AS title
FROM
products a
LEFT JOIN translates b ON a.id = b.product_id
AND b.language_id = 1
LEFT JOIN translates c ON a.id = c.product_id
AND c.language_id = 2
这是工作查询的简化版本。 它的作用:选择所有商品并翻译它们,如果有语言2的翻译(它并不总是存在) - 它是更优选的,但如果没有 - 则语言1(总是翻译成该语言)
是否可以改进此查询?
答案 0 :(得分:3)
您的查询应该没问题。我会把它写成:
SELECT p.id, COALESCE(t1.title, t1.title) AS title
FROM products p LEFT JOIN
translates t1
ON p.id = t1.product_id AND t1.language_id = 1 LEFT JOIN
translates t2
ON p.id = t2.product_id AND t2.language_id = 2;
(使用表名称缩写的表别名有助于使查询更容易理解。)
对于性能,您需要translates(product_id, language_id)
上的索引。我无法想到另一种编写该查询的方法,我希望它比这个版本更快。