前言:
项目中要写个存储过程,从4个表中各获取一个字段值,然后返回。
我这SQLSERVER的三脚猫功夫,上来乱整一顿,别说乱拳打死老师傅,差点把自己弄死!
用法:
使用 INNER JOIN(内连接),我们还可以使用其他几种连接。
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
示例代码:
先抛块砖(不用想了,这么‘无敌’的写法肯定是我写的了)
select ta1.no,ta1.name1,ta2.name2,ta3.name3,ta4.name4 from
(select no,name1 from table1)as ta1,
(select no,name2 from table2)as ta2,
(select no,name3 from table3)as ta3,
(select no,name4 from table4)as ta4
where ta1.no=ta2.no and ta1.no=ta3.no and ta1.no=ta4.no
经高人指点,原来还有join这个东西,羞愧中。。。
SELECT ta1.no,
ta1.name1,
ta2.name2,
ta3.name3,
ta4.name4
FROM table1 AS ta1
INNER JOIN table2 ta2 ON ta1.no=ta2.no
INNER JOIN table3 ta3 ON ta1.no=ta3.no
INNER JOIN table4 ta4 ON ta1.no=ta4.no
以为大功告成,原来还早~
需要是有数据时返回查询所得,不满足条件时返回默认值,加上 left join 和 isnull的用法
最终方法
SELECT ta1.no,
ISNULL(ta1.name1,0),
ISNULL(ta2.name2,0),
ISNULL(ta3.name3,0),
ISNULL(ta4.name4,0)
FROM table1 AS ta1
LEFT JOIN table2 ta2 ON ta1.no=ta2.no
LEFT JOIN table3 ta3 ON ta1.no=ta3.no
LEFT JOIN table4 ta4 ON ta1.no=ta4.no