当前位置: 代码迷 >> Sql Server >> SQL 联合并行查询
  详细解决方案

SQL 联合并行查询

热度:69   发布时间:2016-04-24 09:00:48.0
SQL 联合并行查询,高手指点
本帖最后由 ctmb520 于 2015-06-16 11:30:07 编辑
有数据表A,表B ,表结构如下.注:跟据UID获取数据列表,在表A与表B中如果存在相同MID,优先取出表A数据排除表B数据
表A数据如下
ID       MId     Uid      RightVal
3    10    15      1
4   10    15      4

表B数据如下
ID       mid   roleid             rightval     UID
2    10        2                     1                   15
11    10        2                     4                   15
12    10  2   6                   15
13    10   2   8                   15
3    11   2   9                    15
14    11   2   10                 15
15    11   2   11                  15
16    11  2   12               15
4    14   2   1                  15
取出数据结果如下
mid  rightval
10 1
10 4
11 10
11 11
11 12
14 1
------解决思路----------------------
是不是少了条 11 9
SELECT mid,rightval FROM A WHERE UID=15
UNION ALL
SELECT mid,rightval FROM B WHERE UID=15
AND mid NOT IN(SELECT mid FROM A WHERE UID=15)

------解决思路----------------------
DECLARE @t_TB TABLE ([ID] NVARCHAR(10),[MId] NVARCHAR(10),[Uid] NVARCHAR(10),[RightVal] NVARCHAR(10));
INSERT INTO @t_TB VALUES 
('3','10','15','1'),
('4','10','15','4');

DECLARE @t_TB2 TABLE ([ID] NVARCHAR(10),[mid] NVARCHAR(10),[roleid] NVARCHAR(10),[rightval] NVARCHAR(10),[UID] NVARCHAR(10));
INSERT INTO @t_TB2 VALUES 
('2','10','2','1','15'),
('11','10','2','4','15'),
('12','10','2','6','15'),
('13','10','2','8','15'),
('3','11','2','9','15'),
('14','11','2','10','15'),
('15','11','2','11','15'),
('16','11','2','12','15'),
('4','14','2','1','15');    
SELECT DISTINCT A.[MId],A.RightVal 
 FROM @t_TB A 
UNION ALL
SELECT DISTINCT B.mid,B.rightval
 FROM @t_TB2 B  
INNER JOIN @t_TB A   ON A.UID = B.UID AND A.MID != B.mid

/*
MId        RightVal
---------- ----------
10         1
10         4
11         10
11         11
11         12
11         9     -- ?
14         1
*/
  相关解决方案