如何在多张数据表间执行关联INNER JOIN操作?
多表INNER JOIN实现方法
两表的INNER JOIN逻辑很明确——只保留两张表中外键字段取值匹配的记录,就像你提到的Fig 1里,table1.field_e和table2.field_a匹配的那些table1记录(深蓝色区域)。
要是涉及多张表(比如你说的4个表通过3组外键关联的情况),其实就是把两两连接的逻辑依次串起来就行。要只显示table1中能全程关联到table4的记录,核心就是让每一步连接都只保留匹配的记录,最终剩下的table1记录自然就是能一路关联到table4的。
假设Fig 2里的三组外键关联是:
- table1与table2:
table1.field_e = table2.field_a - table2与table3:
table2.field_x = table3.field_y - table3与table4:
table3.field_m = table4.field_n
对应的SQL脚本可以这么写:
SELECT table1.* FROM table1 INNER JOIN table2 ON table1.field_e = table2.field_a INNER JOIN table3 ON table2.field_x = table3.field_y INNER JOIN table4 ON table3.field_m = table4.field_n;
逻辑说明
- 先让table1和table2做INNER JOIN,过滤出table1中能关联到table2的记录;
- 再把上面的结果和table3做INNER JOIN,过滤出能关联到table3的记录;
- 最后和table4做INNER JOIN,剩下的table1记录就是能全程关联到table4的。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

