我是SQL的新手,发现我不太明白何时使用哪个连接。子查询似乎也令人困惑。我已经设置了以下表格,并且我正在尝试获得特定的结果:
`+--------------------------+ +---------------+ +---------------+ +---------------+`
`| Table_A | | Table_B | | Table_C | | Table_D |`
`+--------------------------+ +---------------+ +---------------+ +---------------+`
`| id | f2 | f3 | f4 | d_id | | a_id | c_id | | id | fc | | id | fs |`
`+--------------------------+ +---------------+ +---------------+ +---------------+`
这就是我想要的:
`+----------------------------------+`
`| a.f2 | a.f3 | a.f4 | d.fs | c.fc |`
`+----------------------------------+`
我发现我可以使用以下查询获得前四列:
Select t1.f2, t1.f3, t1.f4, t2.fs
From Table_A AS t1 INNER JOIN Table_D AS t2
ON t1.d_id = t2.id;
如何从A.id到C.fc?我无法弄清楚如何获得第五列,更不用说与前一个查询一起。这与我在最后一栏中得到的结果大致相同:
Select t1.flow_control
FROM Table_D AS t1 INNER JOIN policy t2
ON t1.id = t2.c_id;
答案 0 :(得分:3)
这应该可以解决问题:
Select t1.f2, t1.f3, t1.f4, t2.fs, t3.fc
From Table_A AS t1
INNER JOIN Table_D AS t2 ON t1.d_id = t2.id
INNER JOIN Table_B AS jointable ON t1.id = jointable.a_id
INNER JOIN Table_C AS t3 ON jointable.c_id = t3.id;
第一次加入是您最初的加入。第二个用于'链接表',它表示Table_A和Table_C之间的HABTM关系。一旦你加入了它,你做第三次连接'连接'到表C,这样你就可以获得'fc'字段。所以基本上第一次连接只适用于Table_D,而另外两个JOIN会带你到最后一个字段。
你可以在一个语句中有多个JOIN链接到完全不同的表格,如果这就是你需要的......就像连接点/跟随关系一样:)