[解决办法] select count(*) from 数据库1.a类数据 where exists (select 1 from 数据库2.table_20110909 where userid = 数据库1.a类数据.userid) or exists (select 1 from 数据库2.table_20110910 where userid = 数据库1.a类数据.userid) or exists (select 1 from 数据库2.table_20110911 where userid = 数据库1.a类数据.userid) [解决办法] 数据量很大的话用临时表处理就可以了。 [解决办法]
[解决办法] 1)各位高手能否说一下这道题的考点是什么
题目没有说明 2个数据库是否在同一机器上,如不在,要用到 FEDERATED 存储引擎
对大数据量的操作
2)能否说一下你们的实现思路或者关键的sql语句 可以用merge 存储引擎为实现 OR EXISTS、UNION来实现
[解决办法] 小菜鸟也插句嘴,如果数据量很少 1类的嵌套可以, 如果数据量较大,那就用临时表吧 create temprary table tem_id(id int) insert into tem_id select id from 库2.table1 insert ignore into tem_id select id from 库2.table2 ...... insert into tem_id select id from 库2.table12 select count(*) from 库1.table a inner join tem_id b on a.id=b.id 呵呵 我还没接触跨DB 操作 假想都是在一耳光服务器上 [解决办法] 都是高手呀,咋就我一個菜呢 [解决办法] 也许按userid进行join union到临时表会更好点? [解决办法] 我不知道. [解决办法] 用hash表。大数据处理一般把需要的数据一下子找出来放到内存,在内存中处理,如果用表连接得处理到何年何月,反正现在的内存都白菜价了 [解决办法]
[解决办法] 这个问题我们也遇到过,我们的解决方法是:建立一张用户表,UserInMonth(userid)表里面只放不重复的用户Id,把(table_20110909,table_20110910,table_20110911)的用户Id放到一张User表里面userid都统一放到这个表里面去。判断的时候select count(1) from user u inner join UserInMonth um on u.userid=um.userid.至于数据可以用存储过程,或者一些数据仓库的用具。 另外说一点,把表拆分的每日一张表,就是因为数据量比较大。。。我以前做一个GPS项目的时候,也是这么做的,每天一张表,一张表5G左右的数据。我们是把原始数据和计算过的业务数据分离的思路来实现的。。。希望对你有帮助。 [解决办法] 如果数据量非常大的话,还硬要在数据库处理,就有点缘木求鱼的感觉了。 放入hadoop处理。哈哈。 [解决办法]
[解决办法] 都很有才, 一代人才么么 [解决办法] 还是怎么办都逃不过30张表的查询: 1.建立id表用来存放30张表的userid create table id(userid varchar2(20)) 不用设主键 2.插入数据可以不去重复 insert in to id (select userid from table_20110909) 就插吧 30个挨个插 现在id表已经具备30天所有userid了 现在有两种选择 3.1把表id数据导出再导入到数据库1就可以查了 select distinct userid from a where userid in(select userid from id) 或者3.2 数据库1与数据库2建立连接 用@实现查询 select distinct userid from a where userid in(select userid from id@数据库2)
有能逃过30张表查询的请赐教
[解决办法] 补充一点如果常用的话 insert in to id (select userid from table_20110901)可以写一个PL/SQL 用LOOP循环或者for循环实现 [解决办法] 还是我 弱弱的说一句上边高手们都想着用SQL 没有想到用PL/SQL 我是写VC加oracle数据库的所以提醒一句oracle也是有编程的 [解决办法] 数据库的大牛!DBA很吃香啊? [解决办法] 新来的,研究下! [解决办法] 数据库1和数据库2什么意思? 是同一个数据库里的两个模式(oracle),两个SQLServer里的Database, 还是两个不同字符串连接的数据库?
这个问题都没说清楚,看来金山出题这哥们就一个初级水平啊。 [解决办法] 是是文件啊啊 [解决办法] 主要考程序的效率。思路如下: 1.对数据数2中每张表进行Userid去重统计 2.得出整个数据库的USERID的去重统计 3。统计出USERID与表1比较一下即可 关键不能拿表1与表2比,否则效率极差 [解决办法] 这个还是仔细想想,肯定有高手回帮你的 [解决办法] 又补充了 [解决办法] 建一张中间表访问记录表 [解决办法] 建一张中间表访问记录表 [解决办法] 都是高手啊! [解决办法] 我觉得可以每个表按照userId建索引,然后先把每个表的 userId 选出来,然后再用join来全部连接。得出的结果就是所有表都存在的userId集合。 select userId from 数据库1.a类数据 inner join (select userId from 数据库2.table_20110909) on 数据库1.a类数据.userId = 数据库2.table_20110909.userId inner join (select userId from 数据库2.table_20110910) on 数据库1.a类数据.userId = 数据库2.table_20110910.userId inner join (select userId from 数据库2.table_20110910) on 数据库1.a类数据.userId = 数据库2.table_20110911.userId ......
SELECT 'dbo2.table_' + CONVERT(VARCHAR(8),DATEADD(mm,number,@LogTimeFrom),112) AS LogTable INTO #Table FROM master..spt_values WHERE TYPE='p' and number<=DATEDIFF(mm,@LogTimeFrom,@LogTimeTo)
DECLARE @t TABLE (id int,count bigint )
DECLARE MyCursor CURSOR FOR SELECT LogTable FROM #Table OPEN MyCursor DECLARE @LogTable nvarchar(200)
FETCH NEXT FROM MyCursor INTO @LogTable WHILE @@FETCH_STATUS =0 BEGIN IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''' + @LogTable + ''') AND type in (N''U'')) BEGIN INSERT INTO @t SELECT id,count(1) as count FROM ' + @LogTable + ' l INNER JOIN #tmp t ON l.ID = t.ID gruop by t.id end FETCH NEXT FROM MyCursor INTO @LogTable END CLOSE MyCursor DEALLOCATE MyCursor DROP TABLE #LogTable