首先有一个软件的基础表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>。
select * from T_App where exists (select distinct AppId from T_AppList where Platform=1 and AppId = T_App.AppId)
select b.* from T_AppList a left join T_App b on a.AppId=b.AppId where a.Platform=1
select * from T_App where exists (select distinct AppId from T_AppList where Platform=1 and AppId = T_App.AppId)
@小孔妹妹: 测试了,可以。谢谢。
@ 会飞的金鱼: 你的方法数据重复了。
@abc54288: 表和表的关联看你用什么数据库了,我的这个写法是考虑到效率的。。。如果直接做表关联的话假设MySQL为例。。。MySQL是先做笛卡尔积再做筛选数据的,所以在这点上注意就好。。还有就是相同的含义,我避开了用 in 去实现。。in的效率在一定程度上和exists差不多。。但not in和exists not就差异很大了。所以在查询的时候有表内结构查询,建议使用exists
@小孔妹妹: 小孔妹妹给力
@小孔妹妹: 恩,我用的是SQL2008R2.
麻烦你重新回个帖吧,你是回复的1楼,所以结帖给不了分。
@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)