gpt4 book ai didi

mysql - 将 MySQL 表与其自身连接

转载 作者:行者123 更新时间:2023-11-30 00:22:00 26 4
gpt4 key购买 nike

我有一个像附图一样的 MySQL 表。

Translation Table

[id + locale] 是我的表键。我有所有英语术语,以 en_US 作为我的语言环境,如果我有任何其他语言环境的翻译,我会将它们添加到具有相同 id 但不同语言环境的表中。如果某个 id 在另一个语言环境中没有记录,则意味着我们还没有翻译它。

我的异常结果也在图像中。为此,我使用了以下 SQL 查询:

    SELECT t1.id as id,        (SELECT t2.text        FROM translation t2        WHERE t2.id = t1.id        AND t2.locale= :locale        ) as translated,        t1.text as english    FROM translation t1    WHERE t1.locale = 'en_US'    AND t1.id= :id

(:id:locale 是我的变量参数)

我的问题:

  1. 我仍然没有对它进行基准测试,但我的查询看起来效率不高。
  2. 我无法对查询中的已翻译列进行搜索或排序。 (或者也许我不知道该怎么做)
  3. 我尝试了左连接(和左外连接),但我认为它在 MySQL 上的行为有所不同

你知道有更好的 SQL 来完成这项工作吗?或者如何对我的已翻译列进行排序和搜索?

谢谢

最佳答案

最好使用左连接。您可以通过在查询左侧添加条件来搜索:

SELECT t1.id as id,
t1.text as english,
t2.text as translated
FROM translation t1
LEFT JOIN translation t2 on t1.id = t2.id
and t2.locale = :locale
WHERE t1.locale = 'en_US'
ORDER BY translated

这样,即使没有符合您的“:locale”的翻译,您仍然可以获得英文翻译。

关于mysql - 将 MySQL 表与其自身连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com