求一个多表多字段查询sql语句

Photon 发布于 2013/02/21 09:39
阅读 3K+
收藏 1

用的是mysql,大概需求是这个样子:

2张表A和B,A表column1跟B表column1比较,如果有结果就把A表column2查出来,没结果就跟B表column2比较,如果还没结果那么A表column2查出来就是null,最终数据量跟单独查询B表一样,所以我觉得应该是以B表为主表,left join A表,试了好多写法都不行,结果会多一些数据,求帮忙,多谢~~

加载中
0
零点三六
零点三六

如果是oralce那么用decode函数

不太熟悉mysql , case when应该也差不多吧

左右表的数据都有,我想应该是全连接

0
Photon
Photon

引用来自“amar”的答案

如果是oralce那么用decode函数

不太熟悉mysql , case when应该也差不多吧

左右表的数据都有,我想应该是全连接

我试过,不过多一些数据,B表一共只有81条数据,查出来有96条

select c.uniqueid, c.clid, c.dst, c.calldate, c.billsec, m.filepath, e.channel, e.account, case when c.channel = e.channel then e.account when c.dstchannel = e.channel then e.account else null end
 from cdr c left join extension e on 1 = 1
 and case when c.channel = e.channel then e.account when c.dstchannel = e.channel then e.account else null end
 left join monitorfile m on m.uniqueid in (c.uniqueid, c.userfield)
 order by c.calldate desc
0
excepiton
excepiton
直接用子查询应该可以吧
SELECT nvl( (select a.column1 from a where a.column1=b.column1),
 nvl( (select a.column2 from a where a.column1=b.column2),
null 
) 
)
 FROM b  where 1=1
0
Photon
Photon

引用来自“throwable”的答案

直接用子查询应该可以吧
SELECT nvl( (select a.column1 from a where a.column1=b.column1),
 nvl( (select a.column2 from a where a.column1=b.column2),
null 
) 
)
 FROM b  where 1=1
貌似不行
0
Photon
Photon

引用来自“Photon”的答案

引用来自“amar”的答案

如果是oralce那么用decode函数

不太熟悉mysql , case when应该也差不多吧

左右表的数据都有,我想应该是全连接

我试过,不过多一些数据,B表一共只有81条数据,查出来有96条

select c.uniqueid, c.clid, c.dst, c.calldate, c.billsec, m.filepath, e.channel, e.account, case when c.channel = e.channel then e.account when c.dstchannel = e.channel then e.account else null end
 from cdr c left join extension e on 1 = 1
 and case when c.channel = e.channel then e.account when c.dstchannel = e.channel then e.account else null end
 left join monitorfile m on m.uniqueid in (c.uniqueid, c.userfield)
 order by c.calldate desc
我知道为什么多一些数据了,因为A表字段column1去跟B表2个字段比较时,有可能都能匹配到,我只是要一种情况,when then or when then这样好像不行
0
Photon
Photon
我现在根据一个时间字段把重复数据过滤掉了——distinct,暂时解决问题。。。
0
泡不烂的凉粉
泡不烂的凉粉

要求听的我晕晕乎乎, 什么叫"A表column1跟B表column1比较,如果有结果就把A表column2查出来,没结果就跟B表column2比较,如果还没结果那么A表column2查出来就是null,"

让我想到经典的“去商店买两个面包。如果有鸡蛋买五个,结果买回来五个面包”。因为商店里有鸡蛋。

需求不清晰啊。

0
乌龟壳
乌龟壳
select * from a left join b on a.c1 = b.c1 or a.c1 = b.c2 我觉得你可能当时思维混乱了下,题目逻辑很清楚以a为主了。
返回顶部
顶部