sqlite LEFT OUTER JOIN 多个表

Posted

技术标签:

【中文标题】sqlite LEFT OUTER JOIN 多个表【英文标题】:sqlite LEFT OUTER JOIN multiple tables 【发布时间】:2012-06-21 18:47:52 【问题描述】:

在这个例子中,我们在 SQLite 数据库上有 3 个相关的表:

CREATE TABLE test1 (
    c1 integer,
    primary key (c1)
);
CREATE TABLE test2 (
    c1 integer,
    c2 integer,
    primary key (c1, c2)
);    
CREATE TABLE test3 (
    c2 integer,
    c3 integer,
    primary key (c2)
);

现在我需要加入所有表格:

 test1 -> test2(带有 c1 列)
          test2 -> test3(带有 c2 列)。

我已经尝试过这个解决方案,但它没有运行:

SELECT 
   * 
   FROM test1 a 
        LEFT OUTER JOIN test2 b
                        LEFT OUTER JOIN test3 c
                          ON c.c2 = b.c2 
          ON b.c1=a.c1 

它给了我一个错误: near "ON": syntax error.

有什么帮助吗?

【问题讨论】:

从未使用过 sqlite3,但正确的标准 SQL 语法是 LEFT OUTER JOIN ... ON ... LEFT OUTER JOIN ... ON ...,而不是嵌套连接。 ) 我在 Oracle、PostgreSQL 和 SQLServer 上使用过这个语法没有任何问题。 嵌套连接 - 或 JOIN (one JOIN two JOIN three) ON (one.id = two.id AND two.some_id = three.some_id)? 【参考方案1】:

这是您的ON 声明的简单错误。这符合 SQL 标准:

SELECT * 
FROM test1 a 
LEFT OUTER JOIN test2 b ON b.c1=a.c1 
LEFT OUTER JOIN test3 c ON c.c2=b.c2 

这在further depth here.中有解释

【讨论】:

感谢 Nathaniel,它运行良好。我多年来一直使用以前的 sql 格式。但是 SQLite 不太喜欢它。 有可能特定的(花哨的?)实现能够解析它,但 SQLite 只是遵守规范。

以上是关于sqlite LEFT OUTER JOIN 多个表的主要内容,如果未能解决你的问题,请参考以下文章

SQLite3 使用 LEFT JOIN 和 UNION 模拟 RIGHT OUTER JOIN

关于mysql中的left join和left outer join的区别

MySQL 数据库中 left outer join 和 left join 啥区别

MySQL 数据库中 left outer join 和 left join 啥区别?

SQL Server:与 TOP 1 的 LEFT OUTER JOIN 最多选择一行

SQL中的left outer join,inner join,right outer join用法详解