父查询匹配子查询返回多个字段 求指导

三撇猪 2016-06-02 03:20:16
列一 列二 列三 列四 列5
aaa1 bbb1 ccc1 ddd1 eee1
aaa1 bbb2 ccc2 ddd2 eee2
aaa1 bbb3 ccc3 ddd3 eee3
aaa1 bbb1 ccc4 ddd4 eee4
aaa4 bbb5 ccc5 ddd5 eee5


子查询根据条件返回的是这种
列一 列二
aaa1 bbb1


然后找出父查询中同时满足列一,列二的
就是找出
aaa1 bbb1 ccc1 ddd1 eee1
aaa1 bbb1 ccc4 ddd4 eee4
这两列

数据量比较大 应该怎么写呢?
...全文
495 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_fox 2016-06-13
  • 打赏
  • 举报
回复
SELECT
*
FROM #a a where exists
(select c_col1 from #a where c_col1=a.c_col1 and c_col2=a.c_col2 and c_col3<>a.c_col3 and c_col4<>a.c_col4 and c_col5<>a.c_col5)

查什么,改一下* 就好了
唐诗三百首 2016-06-07
  • 打赏
  • 举报
回复
引用 3 楼 andyavril 的回复:
基表数据较大 子查询返回的数据不止一条 大概几百条。。。。
建议把子查询结果先存为临时表, 如: select [字段列表] into #t from ..., 然后再与父查询inner join.
ptvbs 2016-06-05
  • 打赏
  • 举报
回复
给你四种方法: DECLARE @t TABLE (b1 VARCHAR(20),b2 VARCHAR(20),b3 VARCHAR(20),b4 VARCHAR(20)) INSERT @t VALUES('aaa1','bbb1', 'ccc1' ,'ddd1'), ('aaa1', 'bbb2' ,'ccc2', 'ddd2'), ('aaa1', 'bbb3', 'ccc3', 'ddd3'), ('aaa1', 'bbb1', 'ccc4', 'ddd4'), ('aaa4' ,'bbb5', 'ccc5', 'ddd5') SELECT a.* FROM @t a LEFT JOIN (SELECT b1 AS bb1,b2 AS bb2 FROM @t WHERE b4 IN ('ddd1','ddd2')) b ON a.b1=b.bb1 AND a.b2=b.bb2 WHERE b.bb1 IS NOT NULL AND b.bb2 IS NOT NULL SELECT a.* FROM @t a RIGHT JOIN (SELECT b1 AS bb1,b2 AS bb2 FROM @t WHERE b4 IN ('ddd1','ddd2')) b ON a.b1=b.bb1 AND a.b2=b.bb2 SELECT a.* FROM @t a INNER JOIN (SELECT b1 AS bb1,b2 AS bb2 FROM @t WHERE b4 IN ('ddd1','ddd2')) b ON a.b1=b.bb1 AND a.b2=b.bb2 SELECT * FROM @t a WHERE EXISTS(SELECT b1,b2 FROM @t WHERE b4 IN ('ddd1','ddd2') and a.b1=b1 AND a.b2=b2) GO
xdashewan 2016-06-02
  • 打赏
  • 举报
回复
打开执行计划,检查有没索引没加
三撇猪 2016-06-02
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
这除了两个条件的inner join外,我真看不出还有什么特别的地方
基表数据较大 子查询返回的数据不止一条 大概几百条。。。。
Kongdom12138 2016-06-02
  • 打赏
  • 举报
回复
数据量比较大是什么意思?是指匹配字段比较多?还是基表数据记录很多? 如果是匹配字段比较多,可以使用动态语句,如果是基表数据记录比较多,建议使用join,不在where中使用子查询 CREATE TABLE #a ( c_col1 NVARCHAR(10), c_col2 NVARCHAR(10), c_col3 NVARCHAR(10), c_col4 NVARCHAR(10), c_col5 NVARCHAR(10) ) INSERT INTO #a SELECT 'aaa1','bbb1','ccc1','ddd1','eee1' INSERT INTO #a SELECT 'aaa1','bbb2','ccc2','ddd2','eee2' INSERT INTO #a SELECT 'aaa1','bbb3','ccc3','ddd3','eee3' INSERT INTO #a SELECT 'aaa1','bbb1','ccc4','ddd4','eee4' INSERT INTO #a SELECT 'aaa4','bbb5','ccc5','ddd5','eee5' SELECT * FROM #a a INNER JOIN ( SELECT DISTINCT c_col1,c_col2 FROM #a WHERE c_col1 = 'aaa1' AND c_col2 = 'bbb1' ) b ON a.c_col1 = b.c_col1 AND a.c_col2 = b.c_col2 DROP TABLE #a
xdashewan 2016-06-02
  • 打赏
  • 举报
回复
这除了两个条件的inner join外,我真看不出还有什么特别的地方

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧