解决数据库三表联查可能遇到的错误,如count计数结果为两个关联表的乘积等,也希望有大佬能在此基础上进一步指点优化。

  • 三张表分别存应用基本信息,应用的访问情况,应用的评分。准备实现通过一个sql语句同时得到每个应用的访问量及评分,并取访问量最高的十个。所以通过三表联查的方式。

    本人算是出学者,着实花了一段时间才正确实现这个功能,希望能有大佬可以进一步优化sql语句。

    具体建表语句就不放在这儿了大致是: 一张基本信息表 TB_APP 包含唯一标识 ‘id’ 及名称
    ‘name’,一条数据相当于一个应用APP。 一张访问量表
    TB_APP_VISITAPP包含本表的唯一标识‘id’;所访问的APP的id,字段名为‘appid’。通过appid 关联
    TB_APP的id。相当于访问一次某个APP就插入一条数据用来根据appid统计访问量。 一张评分表TB_SCORE
    包含包含本表的唯一标识‘id’;分数‘score’;所对应的APP的id,字段名为‘appid’。对某个APP可以无限次打分,根据appid统计计算score字段的平均分。

1.首先看一下只统计访问量的结果。
仅查询访问量

select *
  from (select app.id,
               app.name,
               count(t.appid) visitCount
          from TB_APP app
          left join TB_APP_VISITAPP t
            on t.appid = app.id
         where app.apptype = '1'
         group by app.id, app.name
         order by visitCount desc)
 where rownum 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你希望在一个数据库中查询不同服务器和不同数据库的存在与否,你可以使用 SQL Server 的链接服务器(linked server)功能来实现。链接服务器允许你访问其他 SQL Server 实例或其他数据库引擎的数据。 首先,你需要创建链接服务器,将其他服务器添加为链接服务器。以下是一个示例代码,假设你要将名为 `RemoteServer` 的远程服务器添加为链接服务器: ```sql EXEC sp_addlinkedserver @server = 'RemoteServer', @srvproduct = 'SQL Server'; ``` 接下来,你需要配置链接服务器的登录凭据。这里假设你使用 SQL Server 身份验证,并提供了用户名和密码: ```sql EXEC sp_addlinkedsrvlogin @rmtsrvname = 'RemoteServer', @useself = 'false', @locallogin = NULL, @rmtuser = 'remote_username', @rmtpassword = 'remote_password'; ``` 然后,你可以使用链接服务器来查询其他服务器和数据库。以下是一个示例代码,在循环中检查的存在与否并更新 `table_sum` : ```sql DECLARE @shujuku VARCHAR(100) DECLARE @tablename VARCHAR(100) DECLARE @note VARCHAR(100) DECLARE @id INT DECLARE @count INT SET @count = 1 WHILE @count <= (SELECT COUNT(*) FROM table_61) BEGIN SELECT @shujuku = shujuku, @tablename = tablename, @note = note, @id = id FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, shujuku, tablename, note, id FROM table_61 ) AS t WHERE RowNum = @count DECLARE @sql NVARCHAR(MAX) SET @sql = 'IF NOT EXISTS (SELECT 1 FROM RemoteServer.' + @shujuku + '.sys.tables WHERE name = ''' + @tablename + ''') UPDATE table_sum SET note = ''不存在'' WHERE shujuku = ''' + @shujuku + ''' AND tablename = ''' + @tablename + '''' EXEC sp_executesql @sql SET @count = @count + 1 END ``` 上述代码通过在查询中使用链接服务器的形式,动态构建了查询语句,从而在循环中检查其他服务器和数据库中的的存在与否,并更新 `table_sum` 。 请注意,上述代码仅提供了一个示例,实际使用时需要根据具体情况进行适当的修改,并根据链接服务器的配置和目标服务器的数据库结构来编写查询语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值