您的位置:程序门 -> .net技术 -> c#



求一条sql语句


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求一条sql语句[已结贴,结贴人:7xin]
发表于:2007-09-13 09:14:36 楼主
表名:user_match_list

ul_id         u_id           ul_uid
****************************
1                   1                   0

2                   2                   1

3                   3                   1


假设u_id   =   1,我要得到   ul_id   =   2   和3的记录
假设u_id   =   2   ,我要得到ul_id   =   1   和   3的记录
假设u_id   =   3   ,我要得到ul_id   =   1   和   2的记录.

用一条语句来实现,也就是根据不同u_id   值,得到与其相关联的数据集结果.  
发表于:2007-09-13 09:36:061楼 得分:0
有人回话一下吗?
发表于:2007-09-13 10:07:522楼 得分:20
沒明白你的意思
難道是
select   *   from   user_match_list   where   u_id <> ' '
?
发表于:2007-09-13 10:12:273楼 得分:0
ul_uid   =   0,表示是父级,而ul_uid   与u_id是关联的。
比如   u_id   =   1   ,是当前登陆用户的编号,我要查出这个编号的相关记录。
而ul_uid   =   1的记录有   编号为2,3的两条记录。

而如果我u_id   =   2,我就是要查ul_uid=   1   并且u_id   =   1的记录,也就是得到结果是编号为1,3的两条记录。
发表于:2007-09-13 10:13:584楼 得分:0
“并且”   改成   “或者”,各位帮解答一下吧。
发表于:2007-09-13 10:16:295楼 得分:0
select   *   from   user_match_list   where     ul_id <> :u_id
发表于:2007-09-13 10:24:556楼 得分:10
select   *   from   user_match_list
where   ul_id   <>   (select   ul_id   from   user_match_list   where   u_id   =   "指定的值 ")
发表于:2007-09-13 10:28:057楼 得分:0
應該是
u_id   =   2,我就是要查ul_uid=   1   或者   u_id   =   1的记录吧?
发表于:2007-09-13 10:30:368楼 得分:0
select   *   from   user_match_list   where   (ul_uid=(select   ul_uid   from   user_match_list   where   u_id=?)   or   ul_uid=(select   ul_uid   from   user_match_list   where   u_id=?))   and   u_id <> ?
?是你要的變量
這樣可以不
发表于:2007-09-13 10:33:019楼 得分:0
楼上的,还有就是有可能u_id   不是父级。
我现在做的,就是同居的这样功能,ul_uid   =   0表示是室长。
其它的两条相关的记录就是同居人。
室长进来的时候,显示的是两条同居人信息,而同居人进来,显示的是室人和另外一个同居人信息。
发表于:2007-09-13 10:46:1910楼 得分:0
也就是說   只顯示他同級或者是他的下級是嗎?
发表于:2007-09-13 10:49:3411楼 得分:5
select   *   from   表名   where   u_id   not   in   (select   *   from   表名   where   u_id=1)

不知道是否正确,请测验~~
发表于:2007-09-13 11:10:3612楼 得分:10
ul_id         u_id           ul_uid
****************************
1                   1                   0

2                   2                   1

3                   3                   1


而如果我u_id   =   2,我就是要查ul_uid=   1   并且u_id   =   1的记录,也就是得到结果是编号为1,3的两条记录。


“并且”   改成   “或者”,各位帮解答一下吧。

-------------------------------------------
那应该是3条数据啊,再把你的数据关系理下,至少我没看明白;
发表于:2007-09-13 11:18:3013楼 得分:0
如果u_id   =   2,只会得到ul_id为1和3两条记录.
因为u_id=   2时(自身这条记录不计入结果集中,也就是结果中,不会有这一条记录),ul_uid   =   1,然后查找到ul_uid   =   1的记录是ul_id   =   3
然后再去查u_id   =   1   的记录,ul_id   =   1
所以,返回的结果应该是ul_id   =1和3的两条记录。
发表于:2007-09-13 11:39:1614楼 得分:0
不是很懂你的意思
发表于:2007-09-13 11:41:3815楼 得分:5
如果u_id   =   2,只会得到ul_id为1和3两条记录.
因为u_id=   2时(自身这条记录不计入结果集中,也就是结果中,不会有这一条记录),ul_uid   =   1,然后查找到ul_uid   =   1的记录是ul_id   =   3
然后再去查u_id   =   1   的记录,ul_id   =   1
所以,返回的结果应该是ul_id   =1和3的两条记录。


是什么意思呀?

如果u_id   =   1,那按照上面的意思怎么算出
返回的结果是ui_id   =   2和3的记录呀?
发表于:2007-09-13 11:47:3816楼 得分:10
假设u_id   =   1,我要得到   ul_id   =   2   和3的记录
假设u_id   =   2   ,我要得到ul_id   =   1   和   3的记录
假设u_id   =   3   ,我要得到ul_id   =   1   和   2的记录.

用一条语句来实现,也就是根据不同u_id   值,得到与其相关联的数据集结果.  
------------------------------------------------------------------
declare   @u_id   int
set   @u_id   =1
select   *   from   user_match_list   where   ul_id   <> @u_id  
如果是存储过程,可以将@u_id   当输入参数传值
发表于:2007-09-13 12:13:1617楼 得分:0
如果u_id   =   1,那按照上面的意思怎么算出
返回的结果是ui_id   =   2和3的记录呀?
***************************************

u_id   =   1   时,ul_uid   =   0,我们就查ul_uid   =   1的记录,得到2,3记录

u_id   =   2   时,ul_uid   !=   0   ,我们就查   ul_uid   =   1的记录和   u_id   =   1的记录,得到1,3记录

u_id   =   3   时,ul_uid   !=   0   ,我们就查   ul_uid   =   1的记录和   u_id   =   1的记录,得到1,2记录

只用sql语句来实现,不用存储过程啊。
发表于:2007-09-13 12:14:0018楼 得分:10
--创建临时表
declare   @user_mathch_list   table(ul_id   int,u_id   int,ul_uid   int)
insert   into   @user_mathch_list   select   '1 ', '1 ', '0 'union   all
                                                            select   '2 ', '2 ', '0 'union   all
                                                            select   '3 ', '3 ', '1 '
declare   @temp   int
--除了ul_id=1的其它数据
set   @temp= '1 '
select   *   from   @user_mathch_list   where   ul_id   not   in(@temp)
----------------------------------------------------------------
select   top   1*from   @user_mathch_list   where   ul_id   not   in(@temp)显示一条

发表于:2007-09-13 14:29:1819楼 得分:0
同志们,帮回答一个正确的吧。现在还没有一个人写的是正确的。
发表于:2007-09-13 14:33:5420楼 得分:5
正确答案

select   *   from   user_match_list   where   u_id   !=   值   and   ul_id=(
select   ul_uid   from   user_match_list   where   u_id   =   值)   or  
ul_uid=(select   ul_uid   from   user_match_list   where   u_id   =   值)
发表于:2007-09-13 14:38:2121楼 得分:0
这个很简单!

select   *   from   user_match_list   where   u_id   not   in   ( "你指定的id ")
发表于:2007-09-13 14:40:1322楼 得分:10
ul_id   u_id   ul_uid
****************************
1   1   0

2   2   1

3   3   1


假设u_id   =   1,我要得到   ul_id   =   2   和3的记录
假设u_id   =   2   ,我要得到ul_id   =   1   和   3的记录
假设u_id   =   3   ,我要得到ul_id   =   1   和   2的记录.

用一条语句来实现,也就是根据不同u_id   值,得到与其相关联的数据集结果
_______________________________________________________________________
没能理解楼主的真意,猜着回答一下

select   *   from   table   where   u_id   <>   ui_id
select   *   from   table   where   u_id   not   in   (select   u_id   from   table   where   u_id   =   ui_id)
select   *   from   table   where   u_id   in  
(case   u_id  
when   1   then   '2,3 '
when   2   then   '1,3 '
when   3   then   '1,2 '
)
发表于:2007-09-13 14:47:3823楼 得分:0
sql   =   "select   *   from   user_match_list   where   (ul_uid=(select   ul_uid   from   user_match_list   where   u_id= "+2+ ")   or   ul_uid=(select   ul_uid   from   user_match_list   where   u_id= "+   2   + ")   or   u_id   =   (select   ul_uid   from   user_match_list   where   u_id= "+   2   + "))   and   u_id <> "+   2;

这个是正确的,我在优化一下哈。
发表于:2007-09-13 15:04:1024楼 得分:0
create   table   user_match_list(ul_id   int,u_id   int,ul_uid   int)
insert   into   user_match_list   values(1,1,0)
insert   into   user_match_list   values(2,2,1)
insert   into   user_match_list   values(3,3,1)
go

declare   @u_id   int
set   @u_id=3

select
        b.*
from
        user_match_list   a,
        user_match_list   b
where
        a.u_id=@u_id
        and
        b.u_id <> @u_id
        and
        1=(case   when  
                      (a.ul_uid=0   and   a.u_id=b.ul_uid)  
                      or
                      (a.ul_uid> 0   and   a.ul_uid   in(b.u_id,b.ul_uid))    
                  then   1  
                  else   0  
              end)
go


drop   table   user_match_list
go
发表于:2007-09-13 15:05:2225楼 得分:15
--@u_id=1
/*
ul_id               u_id                 ul_uid            
-----------   -----------   -----------  
2                       2                       1
3                       3                       1
*/


--@u_id=2
/*
ul_id               u_id                 ul_uid            
-----------   -----------   -----------  
1                       1                       0
3                       3                       1
*/


--@u_id=3
/*
ul_id               u_id                 ul_uid            
-----------   -----------   -----------  
1                       1                       0
2                       2                       1
*/


快速检索

最新资讯
热门点击