首页 新闻 搜索 专区 学院

在做一个下载站,SQL学得不深,到处是坑,求SQL语句。

0
悬赏园豆:5 [已解决问题] 解决于 2014-07-13 08:32

首先有一个软件的基础表T_App

数据如下:

AppId  SoftName  Content  CategoryId

1      标题1    内容1    1

2      标题2    内容2    2

3      标题3    内容3    1

4      标题4    内容4    1

还有另一张表:T_AppList, 因为软件有不同的版本号,将不同版本号的软件写入这张表,通过AppId跟 上面的表联系起来。其中Platform是不同平台的id

如下:

AppListId  FilePath      Version      AppId  Platform

1      /upload/xx.zip     1.1        1    1

2      /upload/xxfs.zip   1.3        1    1

3      /upload/xxss.zip   1.5        1    2

4      /upload/aafs.zip   1.0        2    2

 

然后我现在想获取一个 Platform=1 的 List<T_App>。

DZCMS的主页 DZCMS | 初学一级 | 园豆:5
提问于:2014-07-11 09:49
< >
分享
最佳答案
0

select * from T_App where exists (select distinct AppId from T_AppList where Platform=1 and AppId = T_App.AppId)

收获园豆:5
小孔妹妹 | 菜鸟二级 |园豆:247 | 2014-07-11 15:50
其他回答(1)
0
select b.* from T_AppList a left join T_App b on a.AppId=b.AppId
where a.Platform=1
会飞的金鱼 | 园豆:881 (小虾三级) | 2014-07-11 10:43

select * from T_App where exists (select distinct AppId from T_AppList where Platform=1 and AppId = T_App.AppId)

支持(0) 反对(0) 小孔妹妹 | 园豆:247 (菜鸟二级) | 2014-07-11 11:15

@小孔妹妹: 测试了,可以。谢谢。

@ 会飞的金鱼:  你的方法数据重复了。

支持(0) 反对(0) DZCMS | 园豆:5 (初学一级) | 2014-07-11 11:24

@abc54288: 表和表的关联看你用什么数据库了,我的这个写法是考虑到效率的。。。如果直接做表关联的话假设MySQL为例。。。MySQL是先做笛卡尔积再做筛选数据的,所以在这点上注意就好。。还有就是相同的含义,我避开了用 in 去实现。。in的效率在一定程度上和exists差不多。。但not in和exists not就差异很大了。所以在查询的时候有表内结构查询,建议使用exists

支持(0) 反对(0) 小孔妹妹 | 园豆:247 (菜鸟二级) | 2014-07-11 14:33

@小孔妹妹: 小孔妹妹给力

支持(0) 反对(0) +小马哥++ | 园豆:906 (小虾三级) | 2014-07-11 14:43

@小孔妹妹: 恩,我用的是SQL2008R2.

麻烦你重新回个帖吧,你是回复的1楼,所以结帖给不了分。

支持(0) 反对(0) DZCMS | 园豆:5 (初学一级) | 2014-07-11 15:30

@abc54288: select distinct b.* from T_AppList a left join T_App b on a.AppId=b.AppId where a.Platform=1

select * from T_App a where a.AppId in (select distinct b.AppId from T_AppList b where Platform=1 and b.AppId = a.AppId)

支持(0) 反对(0) 会飞的金鱼 | 园豆:881 (小虾三级) | 2014-07-12 09:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册