数据库多表查询
发布网友
发布时间:2022-04-22 21:32
我来回答
共1个回答
热心网友
时间:2022-04-09 21:37
我们通常使用的表之间的联接是等值联接;你的情况需要使用外联接来做。
我按照你的意思分别见了table1,table2,table0(对应你的table表),并把你的数据也增加进去了。
执行下面的SQL可能会得到你想要的结果:
(selecttable1.hm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable1.hmisnotnull)
union
(selecttable2.hm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable2.hmisnotnull)
输出结果如下:
希望是你想要的!
刚才没用到table0表,如果保证hm的值必须在table0中,如要修改上面的SQL如下:
select*from(selecttable1.hmashm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable1.hmisnotnull
union
selecttable2.hmashm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable2.hmisnotnull)astwheret.hmin(selecthmfromtable0)
这样,当table1,table2中的hm值不在table0表中,查询结果就不会出现。
外联接,包括左外联接、右外联接、全外联接的确大多数的程序员都不使用。宁肯用很长的程序代码来实现,但是用数据库sql来实现其实效率是最快的。
建议你了解外联接的知识。