在一条sql里能不能有选择的使用条件?

[复制链接]
查看11 | 回复9 | 2006-2-13 10:13:43 | 显示全部楼层 |阅读模式
举个例子,有三张表:
表一:
uid uname xxxxxxxxx
------------------------------------------
1
abc
xxxx xxxx
2
def
xxxx xxxx
..........
..... ......

表二:
gidgnamexxxxxxxxx
------------------------------------------
3
ghi
xxxxxxxx
4
klm
xxxxxxxx
..... ....
...... ......

表三:
uid gid
xxxx xxxxx
---------------------------------------------
1
0
xxxx
xxxx
0
3
xxxx
xxxxx
2
0
xxxx
xxxx
....
....
.....
.......
现在想关联这三张表,当表三的gid=0的时候,就用uid去和表一的uid关联,当表三的uid=0的时候,就用gid去和表二关联。能不能在一条sql里写出来啊?
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
可以, 但最终结果是如何的?
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
我想取出的结果是:
表一和表二里都有一个email列,表三里有个name列,从表三里取出name,当表三的gid=0时,就从表一里取出email,当表三的uid=0时,就从表二里取出email
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
似乎现在很多人都走入了这么一种误区哦,即乐此不彼地寻求用一条SQL语句来解决很复杂的问题,其实这并不是一个好的现象,所谓有利必有弊,有时候一条sql语句写出来的话你会发现性能、可读性和可维护性很差,并且欠缺灵活性,希望三思而后行。
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
表一:
uid uname emailxxxxx
------------------------------------------
1
abc
[email protected] xxxx
2
def
[email protected] xxxx
..........
..... ......

表二:
gidgnameemailxxxxx
------------------------------------------
3
ghi [email protected]
4
klm
[email protected]
..... ....
...... ......

表三:
uid gid
name xxxxx
---------------------------------------------
1
0
zhaoxxxx
0
3
qian xxxxx
2
0
sun
xxxx
....
....
.....
.......
结果是:
name
email
---------------------------
zhao
[email protected]
qian
[email protected]
suin
[email protected]
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
这有何难:
select t3.*,case when(t3.gid=0) then (select t1.email from t1 where t1.uid=t3.uid) else (select t2.email from t2 where t2.gid=t3.gid) end from t3
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
原帖由 ilovemk 于 2007-11-20 13:56 发表
似乎现在很多人都走入了这么一种误区哦,即乐此不彼地寻求用一条SQL语句来解决很复杂的问题,其实这并不是一个好的现象,所谓有利必有弊,有时候一条sql语句写出来的话你会发现性能、可读性和可维护性很差,并且 ...

有道理,但是如果实现起来不是很麻烦的话我还是想一条搞定的。
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
select b.email,
a.name
from tb3 a, tb1 b
where a.gid = 0
and a.uid = b.uid
union all
select b.email,
a.name
from tb3 a, tb2 b
where a.uid = 0
and a.gid = b.gid;
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
用union all就可以搞定
回复

使用道具 举报

千问 | 2006-2-13 10:13:43 | 显示全部楼层
原帖由 ilovemk 于 2007-11-20 13:56 发表
似乎现在很多人都走入了这么一种误区哦,即乐此不彼地寻求用一条SQL语句来解决很复杂的问题,其实这并不是一个好的现象,所谓有利必有弊,有时候一条sql语句写出来的话你会发现性能、可读性和可维护性很差,并且 ...

有时候确实不得已而为之,必须我现在面临的情况就是SQL语句写在文本中。根本不能进行分步运算,就只有写在一起了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行