s*****d 发帖数: 7 | 1 有两个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
谢谢啦 |
B*****g 发帖数: 34098 | 2 ignore table 2 eid
【在 s*****d 的大作中提到】 : 有两个tables,都是多对多的关系 : table 1 : cid eid : 1 A : 1 B : 1 C : 2 A : 2 D : 3 B : table 2
|
s*****d 发帖数: 7 | 3
sorry Beijing,
给的sample 不好 如果 table 2 加入
cid eid
5 A
1 F
光join cid 不成啊
【在 B*****g 的大作中提到】 : ignore table 2 eid
|
N**N 发帖数: 1713 | 4 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
要这个效果?
【在 s*****d 的大作中提到】 : : sorry Beijing, : 给的sample 不好 如果 table 2 加入 : cid eid : 5 A : 1 F : 光join cid 不成啊
|
B*****g 发帖数: 34098 | 5 最好在解释清楚点,还不能确定要什么。
不过好像你需要的不是left join,full outer join似乎更合适。
至于partitial,没听说过,不过可以在where上面下文章。
【在 s*****d 的大作中提到】 : : sorry Beijing, : 给的sample 不好 如果 table 2 加入 : cid eid : 5 A : 1 F : 光join cid 不成啊
|
s*****d 发帖数: 7 | 6 谢谢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的方法看起来可行,我去真数据上试试看。
再一次谢谢你们。
【在 B*****g 的大作中提到】 : 最好在解释清楚点,还不能确定要什么。 : 不过好像你需要的不是left join,full outer join似乎更合适。 : 至于partitial,没听说过,不过可以在where上面下文章。
|
s*****d 发帖数: 7 | 7 如果table2 还有其他 columns ,distinct 好像就不起作用了。
【在 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 发帖数: 34098 | 8 那个数据库
在
【在 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 发帖数: 7 | 9 SQL server 2008 R2
【在 B*****g 的大作中提到】 : 那个数据库 : : 在
|
B*****g 发帖数: 34098 | 10 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 发帖数: 521 | 11 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 发帖数: 7 | 12 理解你不喜欢的心情. 我消化一下将就用.-:)
感谢啊.
【在 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 发帖数: 7 | 13 这个方案数据大了不好用. 百万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 发帖数: 1713 | 14 那用(select distinct eid from table2)之类的subquery代替table2就行
【在 s*****d 的大作中提到】 : 如果table2 还有其他 columns ,distinct 好像就不起作用了。
|
w****w 发帖数: 521 | 15 百万ROWS算大?把in换成temp表,几亿row也没问题。
【在 s*****d 的大作中提到】 : 这个方案数据大了不好用. 百万ROWS用 IN 会被喷死的 : 谢谢献计献策.
|