首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

full join 如何不行啊

2012-12-28 
full join 怎么不行啊???select * fromUT_PROGRAM where userid4有142条数据select * fromUT_PROGRAM whe

full join 怎么不行啊???
select * from  UT_PROGRAM where userid=4   有142条数据
select * from  UT_PROGRAM where userid=50437有165条数据

以上两个结果中 ProgramID 相同的只有1条

其中 UT_PROGRAM 表有4个字段 [UserID],[ProgramID],[Weight] ,[Type]

select * from  UT_PROGRAM u1
full  join (select * from  UT_PROGRAM where userid=4 ) u2 on u2.ProgramID=u1.ProgramID

 where u1.userid =50437


这样操作却只出165条记录 .

为什么呢 ???


[最优解释]
where u1.userid =50437 不等于 on u1.userid =50437
[其他解释]
试试,楼主写的有问题
select *
from (select * from  UT_PROGRAM u1 where userid =50437) as u1
full  join (select * from  UT_PROGRAM where userid=4 ) u2 on u2.ProgramID=u1.ProgramID  

[其他解释]
说错了 理解错你的意思了
select * from  UT_PROGRAM u1
full  join (select * from  UT_PROGRAM where userid=4 ) u2 on u2.ProgramID=u1.ProgramID
这句话结果是 UT_PROGRAM 所有数据
  where u1.userid =50437 筛选出来是select * from  UT_PROGRAM where userid=50437的数据
[其他解释]
你想要的写法应该是

SELECT  * FROM    ( SELECT    *   FROM      UT_PROGRAM   WHERE     userid = 50437 ) u1 full JOIN ( SELECT   *  FROM     UT_PROGRAM    WHERE    userid = 4 ) u2 ON u2.ProgramID = u1.ProgramID
结果应该是142+165-1条
[其他解释]
用full的话应该是142+165-1条记录啊,求大神指教
[其他解释]
full是全连 应该用内连把full去掉
[其他解释]
用inner join
SELECT  *
FROM    ( SELECT    *
          FROM      UT_PROGRAM
          WHERE     userid = 50437
        ) u1
        INNER   JOIN ( SELECT   *
                       FROM     UT_PROGRAM
                       WHERE    userid = 4
                     ) u2 ON u2.ProgramID = u1.ProgramID

------其他解决方案--------------------


因为你加了u1.userid =50437

热点排行