2

由于 SQLite 不支持 RIGHT OUTER JOINS,我提出以下挑战(阅读:邀请为我工作):

重构此查询,使其不再使用 SQLite 不支持的结构,如 RIGHT/FULL OUTER JOIN。

SELECT     strings.*, translations.text
FROM         translations INNER JOIN
                      language ON translations.language_id = language.id RIGHT OUTER JOIN
                      strings ON translations.string_id = strings.id
WHERE     (language.handle = 'english')

我觉得它可以通过子查询或通过旋转表并执行 LEFT OUTER JOIN 来实现,但我的尝试失败了;我的 SQL 不再像以前那样了。

这是显示适用架构的查询构建器大纲:http: //dl.getdropbox.com/u/264612/sql-refactor.PNG

第一个破解它会得到 dekz 的电子拥抱

4

2 回答 2

3

以下内容未经测试。

select strings.*, translations.text
from strings left outer join translations
     on translations.string_id = strings.id
           and translations.language_id = (select id
                                           from language
                                           where language.handle = 'english')

我认为这将为您提供具有匹配翻译文本的所有字符串,其中存在合适的英文翻译。那是你想要得到的吗?

于 2009-01-30T03:48:37.187 回答
2

有趣的是,SQLite 允许左外连接但不允许右外连接。好吧,因为它确实允许左外连接,所以你是对的,你可以重新排列连接顺序:

SELECT     strings.*, translations.text
FROM strings LEFT OUTER JOIN (
    translations INNER JOIN language ON translations.language_id = language.id
) tr ON tr.string_id = strings.id
WHERE     (language.handle = 'english')

[编辑:应用 Blorgbeard 的命名连接表以解析查询的建议——希望它现在可以工作!]

于 2009-01-30T03:49:08.497 回答