回答

收藏

sqlite LEFT OUTER JOIN多个表

技术问答 技术问答 249 人阅读 | 0 人回复 | 2023-09-14

在此示例中,我们在SQLite数据库上具有3个相关表:
3 g6 T) h1 [; ], P) fCREATE TABLE test1 ($ Z3 K6 t! ~+ R- I; r6 Q" f
    c1 integer,2 Q3 n* z/ }+ ?* f8 V
    primary key (c1)
  ^  ^2 {+ ]- f! y);
0 E, {7 y2 C( ?8 A& D5 |8 y* hCREATE TABLE test2 (
' o# Z. v2 o/ E& s6 ]3 G& q, R    c1 integer,
+ a8 Q4 h* s4 T" ]/ h$ k    c2 integer,
) m) Z: _# `5 @! `4 S: g5 ?+ p# c    primary key (c1, c2)# T1 n  E! M; L' J
);   
9 s8 ~& `# f6 R( x3 x+ M- NCREATE TABLE test3 (5 d3 H$ G' C# W5 A' G; w
    c2 integer,; ~0 I! b7 d2 o6 f% c1 @
    c3 integer,
! W$ i1 {+ s9 d7 n    primary key (c2)- o8 J$ @# v( `$ _
);! G& w! h6 @# Q1 o) r5 J( i* ?! b/ d
现在,我需要联接所有表:
7 W6 B+ `  C7 n test1-> test2(带有c1列)
$ b; v& u( p" a& j' ~+ v          test2-> test3(带有c2列)。! z  P8 ^  O5 `$ w5 w6 I7 E; d. m0 T2 Y
我已经尝试过此解决方案,但无法运行:2 L' j/ Y0 w, W7 O9 C' |
SELECT
2 s! l5 Z1 ~4 E% |9 U" {   * $ j5 c7 _4 T  m6 b. v% \& s
   FROM test1 a , P- t3 y6 P/ z  d% r# e: A
        LEFT OUTER JOIN test2 b
: g7 i+ w0 G$ ~* u5 o* q5 h0 R                        LEFT OUTER JOIN test3 c: M- B, ^- n% {4 M
                          ON c.c2 = b.c2 + M+ |; I' b$ _7 j5 d; L. t8 _) |
          ON b.c1=a.c1
* x5 b% I$ e( w5 i1 q8 n* [它给我一个错误: near "ON": syntax error.
$ b' X! ^8 o: ?3 @: e. A  e% `% Z有什么帮助吗?
2 e: e& t0 u- q" B               
3 w/ v8 h' L/ |5 g* L解决方案:
' V+ c) U  s( J1 W& u               
; X6 a! T# n* J. k$ _  C# A, R7 I5 }7 K. Z) W
( N- A7 G8 ^; Z
                这是您的ON陈述的简单错位。这符合SQL标准:
# Y/ y) f! @. }( f" CSELECT *
2 U! W5 P8 n1 |3 uFROM test1 a * |$ l9 H# p7 r
LEFT OUTER JOIN test2 b ON b.c1=a.c1
: U1 F) j, Q$ B( t8 \( qLEFT OUTER JOIN test3 c ON c.c2=b.c24 u' Y9 e9 _7 }& l0 j2 ]$ X! V
在此将对此进行更深入的说明。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则