求助连接3个表如何写SQL语句

时间:2021-05-31 11:13:26
数据库是Oracle9i数据库,有以下三个表,表一纳税人登记信息表(dj_nsrxx):
求助连接3个表如何写SQL语句
表二是临时纳税人信息表(sb_lszsnsrxx)
求助连接3个表如何写SQL语句
表三是申报征收信息(sb_zsxx)
求助连接3个表如何写SQL语句

表三中的纳税人识别号(nsrsbh)是有表一和表二中的纳税人识别号组成的,如何写查询语句,显示纳税人识别号、纳税人名称和税额呢,用过full join,可是不成功,也许我写的语句不对。请大家帮我写个语句吧,谢谢。

25 个解决方案

#1


select a.nsrsbh as 纳税人识别号,nvl(b.纳税人名称,nvl(c.nsrmc,'')) as 纳税人名称,a.se as 税额 from sb_zsxx as a
left join dj_nsrxx as b   on a.nsrsbh=b.纳税人识别号
left join sb_lszsnsrxx as c on a.nsrsbh=c.nsrsbh

#2


SELECT
A.nsrsbh[纳税人识别号]
,NVL(B.[纳税人名称],C.nsrmc)[纳税人名称]
,A.se[税额]
FROM
sb_zsxx A
LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.[纳税人识别号]
LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh

ORACLE?我还去查了下ORACLE的ISNULL~~
需不需要聚合呢?

SELECT
A.nsrsbh[纳税人识别号]
,NVL(B.[纳税人名称],C.nsrmc)[纳税人名称]
,SUM(A.se[税额])[总税额]
FROM
sb_zsxx A
LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.[纳税人识别号]
LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh
GROUP BY
A.nsrsbh
,NVL(B.[纳税人名称],C.nsrmc)

#3


抱歉,表一的字段名其实也是字母,和表二和表三字段相同,表一的纳税人识别号也是nsrsbh,纳税人名称为nsrmc,不知是否已经影响了楼上大侠写语句的效果。

#4


引用 3 楼 wuqiwyt 的回复:
抱歉,表一的字段名其实也是字母,和表二和表三字段相同,表一的纳税人识别号也是nsrsbh,纳税人名称为nsrmc,不知是否已经影响了楼上大侠写语句的效果。

將中文改為字母,試一下。

#5


引用 3 楼 wuqiwyt 的回复:
抱歉,表一的字段名其实也是字母,和表二和表三字段相同,表一的纳税人识别号也是nsrsbh,纳税人名称为nsrmc,不知是否已经影响了楼上大侠写语句的效果。

其实一样的,你也可以自己换~~
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A
    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
    LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh

聚合
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,SUM(A.se)[总税额]
FROM
    sb_zsxx A
    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
    LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh
GROUP BY
    A.nsrsbh
    ,NVL(B.nsrmc,C.nsrmc)

我们语句中的汉字别名可要可不要,只是方便你在SSMS上执行脚本的效果,只要你在程序读取列名的时候对上就可以了

#6


提供个思路

你先把 前2 张表, union all 一下。

#7


求助连接3个表如何写SQL语句

#8


刚才执行,不能运行,我再仔细检查一下是不是语句漏掉了某些字符,稍后反馈。

#9


谢谢这个思路

#10


SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A
    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
    LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=C.nsrsbh

我错了一个字符~~
LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh= B.nsrsbh
改为C~~

#11


SELECT

    A.nsrsbh
,B.nsrmc,

    ,A.se

FROM

    sb_zsxx A,dj_nsrxx B

    WHERE A.nsrsbh=B.nsrsbh
上面的语句可以正常执行,但是下面的语句无法执行:
SELECT

    A.nsrsbh

    ,B.nsrmc,

    ,A.se

FROM

    sb_zsxx A

    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
是不是ORACLE数据库不适用JOHN语法啊

#12


是支持的,我们原来的语句,执行之后,报什么错呢

#13


错误警告:ORA-00933 command not properly ended

#14


求助连接3个表如何写SQL语句

求助连接3个表如何写SQL语句
换成nvl(b.nsrmc,c.nsrmc)也不行

#15


SB_zsxx中其实还有很多字段,包括入库日期rkrq,加入where条件应该不会出错,并且即使把where条件去掉也是出错

#16


sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C

    WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh
那你先这样连接吧~
再找下原因~
9i已经直接JOIN了
也可以再试试
LEFT JOIN换成
LEFT OUTER JOIN

#17


引用 16 楼 ky_min 的回复:
sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C

    WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh
那你先这样连接吧~
再找下原因~
9i已经直接JOIN了
也可以再试试
LEFT JOIN换成
LEFT OUTER JOIN

谢谢,我试试

#18


郁闷,不成功。WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh 应该是交集,更不可行,and换成or,往往语句半天没反应。left join换成left outer join同样不执行。

#19


WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh 应该是交集
这点是我漏了~~
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE(A.nsrsbh=B.nsrsbh(+) OR A.nsrsbh=C.nsrsbh(+)) AND 其他条件

试下这个

#20


好的,谢谢,明天上班试试!

#21


求助连接3个表如何写SQL语句

#22


ORACLE这么奇怪?
那你再试下
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE A.nsrsbh=B.nsrsbh(+) AND A.nsrsbh=C.nsrsbh(+) AND 其他条件

虽然不符逻辑,不过说不定可行

#23


引用 22 楼 ky_min 的回复:
ORACLE这么奇怪?
那你再试下
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE A.nsrsbh=B.nsrsbh(+) AND A.nsrsbh=C.nsrsbh(+) AND 其他条件

虽然不符逻辑,不过说不定可行

这个好像试过了,可以运行,但是是空记录。也就是说没有符合条件的记录。只有有or函数,执行就半天没反应。明天再试试,感觉非常奇怪。

#24


引用 23 楼 wuqiwyt 的回复:
Quote: 引用 22 楼 ky_min 的回复:

ORACLE这么奇怪?
那你再试下
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE A.nsrsbh=B.nsrsbh(+) AND A.nsrsbh=C.nsrsbh(+) AND 其他条件

虽然不符逻辑,不过说不定可行

这个好像试过了,可以运行,但是是空记录。也就是说没有符合条件的记录。只有有or函数,执行就半天没反应。明天再试试,感觉非常奇怪。
ORACLE(+)是外连接,也试过了吗

#25


试过了。是不是征管系统对查询语句做了限制?
看这个介绍:
求助连接3个表如何写SQL语句

#1


select a.nsrsbh as 纳税人识别号,nvl(b.纳税人名称,nvl(c.nsrmc,'')) as 纳税人名称,a.se as 税额 from sb_zsxx as a
left join dj_nsrxx as b   on a.nsrsbh=b.纳税人识别号
left join sb_lszsnsrxx as c on a.nsrsbh=c.nsrsbh

#2


SELECT
A.nsrsbh[纳税人识别号]
,NVL(B.[纳税人名称],C.nsrmc)[纳税人名称]
,A.se[税额]
FROM
sb_zsxx A
LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.[纳税人识别号]
LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh

ORACLE?我还去查了下ORACLE的ISNULL~~
需不需要聚合呢?

SELECT
A.nsrsbh[纳税人识别号]
,NVL(B.[纳税人名称],C.nsrmc)[纳税人名称]
,SUM(A.se[税额])[总税额]
FROM
sb_zsxx A
LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.[纳税人识别号]
LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh
GROUP BY
A.nsrsbh
,NVL(B.[纳税人名称],C.nsrmc)

#3


抱歉,表一的字段名其实也是字母,和表二和表三字段相同,表一的纳税人识别号也是nsrsbh,纳税人名称为nsrmc,不知是否已经影响了楼上大侠写语句的效果。

#4


引用 3 楼 wuqiwyt 的回复:
抱歉,表一的字段名其实也是字母,和表二和表三字段相同,表一的纳税人识别号也是nsrsbh,纳税人名称为nsrmc,不知是否已经影响了楼上大侠写语句的效果。

將中文改為字母,試一下。

#5


引用 3 楼 wuqiwyt 的回复:
抱歉,表一的字段名其实也是字母,和表二和表三字段相同,表一的纳税人识别号也是nsrsbh,纳税人名称为nsrmc,不知是否已经影响了楼上大侠写语句的效果。

其实一样的,你也可以自己换~~
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A
    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
    LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh

聚合
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,SUM(A.se)[总税额]
FROM
    sb_zsxx A
    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
    LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=B.nsrsbh
GROUP BY
    A.nsrsbh
    ,NVL(B.nsrmc,C.nsrmc)

我们语句中的汉字别名可要可不要,只是方便你在SSMS上执行脚本的效果,只要你在程序读取列名的时候对上就可以了

#6


提供个思路

你先把 前2 张表, union all 一下。

#7


求助连接3个表如何写SQL语句

#8


刚才执行,不能运行,我再仔细检查一下是不是语句漏掉了某些字符,稍后反馈。

#9


谢谢这个思路

#10


SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A
    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
    LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh=C.nsrsbh

我错了一个字符~~
LEFT JOIN sb_lszsnsrxx C ON A.nsrsbh= B.nsrsbh
改为C~~

#11


SELECT

    A.nsrsbh
,B.nsrmc,

    ,A.se

FROM

    sb_zsxx A,dj_nsrxx B

    WHERE A.nsrsbh=B.nsrsbh
上面的语句可以正常执行,但是下面的语句无法执行:
SELECT

    A.nsrsbh

    ,B.nsrmc,

    ,A.se

FROM

    sb_zsxx A

    LEFT JOIN dj_nsrxx B ON A.nsrsbh=B.nsrsbh
是不是ORACLE数据库不适用JOHN语法啊

#12


是支持的,我们原来的语句,执行之后,报什么错呢

#13


错误警告:ORA-00933 command not properly ended

#14


求助连接3个表如何写SQL语句

求助连接3个表如何写SQL语句
换成nvl(b.nsrmc,c.nsrmc)也不行

#15


SB_zsxx中其实还有很多字段,包括入库日期rkrq,加入where条件应该不会出错,并且即使把where条件去掉也是出错

#16


sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C

    WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh
那你先这样连接吧~
再找下原因~
9i已经直接JOIN了
也可以再试试
LEFT JOIN换成
LEFT OUTER JOIN

#17


引用 16 楼 ky_min 的回复:
sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C

    WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh
那你先这样连接吧~
再找下原因~
9i已经直接JOIN了
也可以再试试
LEFT JOIN换成
LEFT OUTER JOIN

谢谢,我试试

#18


郁闷,不成功。WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh 应该是交集,更不可行,and换成or,往往语句半天没反应。left join换成left outer join同样不执行。

#19


WHERE A.nsrsbh=B.nsrsbh AND A.nsrsbh=C.nsrsbh 应该是交集
这点是我漏了~~
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE(A.nsrsbh=B.nsrsbh(+) OR A.nsrsbh=C.nsrsbh(+)) AND 其他条件

试下这个

#20


好的,谢谢,明天上班试试!

#21


求助连接3个表如何写SQL语句

#22


ORACLE这么奇怪?
那你再试下
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE A.nsrsbh=B.nsrsbh(+) AND A.nsrsbh=C.nsrsbh(+) AND 其他条件

虽然不符逻辑,不过说不定可行

#23


引用 22 楼 ky_min 的回复:
ORACLE这么奇怪?
那你再试下
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE A.nsrsbh=B.nsrsbh(+) AND A.nsrsbh=C.nsrsbh(+) AND 其他条件

虽然不符逻辑,不过说不定可行

这个好像试过了,可以运行,但是是空记录。也就是说没有符合条件的记录。只有有or函数,执行就半天没反应。明天再试试,感觉非常奇怪。

#24


引用 23 楼 wuqiwyt 的回复:
Quote: 引用 22 楼 ky_min 的回复:

ORACLE这么奇怪?
那你再试下
SELECT
    A.nsrsbh[纳税人识别号]
    ,NVL(B.nsrmc,C.nsrmc)[纳税人名称]
    ,A.se[税额]
FROM
    sb_zsxx A,dj_nsrxx B,sb_lszsnsrxx C
WHERE A.nsrsbh=B.nsrsbh(+) AND A.nsrsbh=C.nsrsbh(+) AND 其他条件

虽然不符逻辑,不过说不定可行

这个好像试过了,可以运行,但是是空记录。也就是说没有符合条件的记录。只有有or函数,执行就半天没反应。明天再试试,感觉非常奇怪。
ORACLE(+)是外连接,也试过了吗

#25


试过了。是不是征管系统对查询语句做了限制?
看这个介绍:
求助连接3个表如何写SQL语句