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 啥区别?