有两个tables,都是多对多的关系 table 1 cid eid 1 A 1 B 1 C 2 A 2 D 3 B table 2 cid eid 1 A 1 B 2 A 想要的结果 1 A 1 B 1 C 2 A 2 D 就是说 cid inner join,within cid, eid要 left join 谢谢啦
【在 N**N 的大作中提到】 : SELECT distinct t1.[cid] : ,t1.[eid] : FROM [Table1] as t1 : inner join [Table2] as t2 : on t1.cid=t2.cid : left join [Table2] as t3 : on t1.eid=t3.eid : 要这个效果?
B*g
15 楼
那个数据库
在
【在 s*****d 的大作中提到】 : 谢谢Beijing and NaCN. 说的是不清楚,例子给得也不好。实际数据太大太复杂,全是 : 多对多,没有任何key. 总之就是,一个column 要先 inner join, 另一个 column 在 : column1 inner join 之后 再 outer join. 但是第一个inner join 两个 columns 都 : 要 ON. Like on t1.c1=t2.c11 and t1.c2=t2.c22, 但是这样又把t1.c2中的NULL : filtered out了。 NaCN的方法看起来可行,我去真数据上试试看。 : 再一次谢谢你们。
s*d
16 楼
SQL server 2008 R2
【在 B*****g 的大作中提到】 : 那个数据库 : : 在
B*g
17 楼
I do not like it, but cannot think anything better for the present SELECT t.*, COUNT(DISTINCT TNAME) OVER (PARTITION BY t.cid) cnt FROM ( SELECT t1.*, 1 tname FROM table1 t1 UNION ALL SELECT t2.*, 2 tname FROM table2 t2) t
【在 s*****d 的大作中提到】 : SQL server 2008 R2
w*w
18 楼
SELECT *,(SELECT TNAME FROM T2 B WHERE A.CID=B.CID AND A.EID=B.EID) AS TNAME FROM T1 A WHERE A.CID IN (SELECT CID FROM T2)
s*d
19 楼
理解你不喜欢的心情. 我消化一下将就用.-:) 感谢啊.
【在 B*****g 的大作中提到】 : I do not like it, but cannot think anything better for the present : SELECT t.*, COUNT(DISTINCT TNAME) OVER (PARTITION BY t.cid) cnt : FROM ( : SELECT t1.*, 1 tname : FROM table1 t1 : UNION ALL : SELECT t2.*, 2 tname : FROM table2 t2) t
s*d
20 楼
这个方案数据大了不好用. 百万ROWS用 IN 会被喷死的 谢谢献计献策.
【在 w****w 的大作中提到】 : SELECT *,(SELECT TNAME FROM T2 B : WHERE A.CID=B.CID AND A.EID=B.EID) AS TNAME : FROM T1 A : WHERE A.CID IN (SELECT CID FROM T2)
N*N
21 楼
那用(select distinct eid from table2)之类的subquery代替table2就行