永发信息网

SQL表问题 无法解决 equal to 操作的排序规则冲突

答案:3  悬赏:10  手机版
解决时间 2021-01-12 09:50
SQL表问题 无法解决 equal to 操作的排序规则冲突
最佳答案
如图所示,在where条件中如果用a.name=b.name的时候两个表中name字段的排序规则最好一样,你看一下是哪个条件的问题,然后把排序规则改成一样的
如果还有疑问可以HI我

全部回答
看到你的图片了。你的其中三个选择查询代码设计有问题,下面列出第一个选择查询的原设计:
“select @g_Name=bb.g_name from (SELECt DISTINCT TOP 1 SUM(aa.clevel) AS lv,aa.G_Name
FROM (SELECt dbo.Character.cLevel,dbo.Character.Name,
dbo.GuildMember.G_Name
FROM dbo.Character LEFT OUTER JOIN
dbo.GuildMember ON dbo.Character.Name=dbo.GuildMember.Name)
aa
WHERe (G_Name IS NOT NULL)
GROUP BY G_Name
ORDER BY lv DESC) bb”
上面代码由三层查询复合而成。
首先最内层子查询有错误
原写法“SELECt dbo.Character.cLevel,dbo.Character.Name,dbo.GuildMember.G_Name
FROM dbo.Character LEFT OUTER JOIN dbo.GuildMember ON dbo.Character.Name=dbo.GuildMember.Name”
应改为“SELECt dbo.Character.cLevel,dbo.Character.Name,dbo.GuildMember.Name as G_Name
FROM dbo.Character LEFT OUTER JOIN dbo.GuildMember ON dbo.Character.Name=dbo.GuildMember.Name”
其次,第二层子查询有问题
原设计“SELECt DISTINCT TOP 1 SUM(aa.clevel) AS lv,aa.G_Name FROM aa
WHERe (G_Name IS NOT NULL)
GROUP BY G_Name
ORDER BY lv DESC”
其中DISTINCT关键字与ORDER BY lv 不能同时使用,否则会有冲突
另外使用多重复合子查询时,用列别名排序SQL代码需要交代得非常清晰否则数据库引擎会无法识别,较好的做法是作子查询时先不排序等到输出子集后再对子集排序。
建议你根据上述意见重新设计那3个选择查询。
如果你能说出具体查询要求或意图,我可以考虑为你设计一个正确的SQL代码。
下面是对你的原代码设计的修改建议:
修改方案1
select @g_Name=bb.g_name from (SELECt DISTINCT TOP 1 SUM(aa.clevel) AS lv,aa.G_Name
FROM (SELECt dbo.Character.cLevel,dbo.Character.Name,
dbo.GuildMember.Name AS G_Name
FROM dbo.Character LEFT OUTER JOIN
dbo.GuildMember ON dbo.Character.Name=dbo.GuildMember.Name)
aa
WHERe (G_Name IS NOT NULL)
GROUP BY G_Name
ORDER BY SUM(aa.clevel) DESC) bb
此段代码改动不大,但是重复计算SUM(aa.clevel)影响效率
修改方案2
select @g_Name=bb.g_name from (SELECt TOP 1 cc.* FROM (SELECt DISTINCT SUM(aa.clevel) AS lv,aa.G_Name
FROM (SELECt dbo.Character.cLevel,dbo.Character.Name,
dbo.GuildMember.Name AS G_Name
FROM dbo.Character LEFT OUTER JOIN
dbo.GuildMember ON dbo.Character.Name=dbo.GuildMember.Name)
aa
WHERe (G_Name IS NOT NULL)
GROUP BY G_Name ) cc ORDER BY cc.lv DESC) bb
此段代码改动大一些,增加一层子查询,避免了重复计算SUM(aa.clevel),效率有所提高。
注:由于不清楚你的具体查询要求(意图),这里无法判断相关SQL代码逻辑能否输出符合要求的结果。
你这个问题是字符型的排序规则不一致导致的
如果两个表字符串排序规则不一样,可以用collate子句来临时转换,例如下列脚本将一个非Chinese_PRC_CI_AS规则(例如Chinese_PRC_BIN)的字符串,转换为Chinese_PRC_CI_AS型的
select rtrim(ltrim(cName)) collate Chinese_PRC_CI_AS from 表名
where rtrim(ltrim(cName)) collate Chinese_PRC_CI_AS like'%A%'
那么你的问题解决方法,先查找除在where条件里面,使用不同的排序规则字符串的各自的排序规则,然后在其中之一后面用collate转换就行了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
山东海洋集团有限公司怎么样?
百日临池功一笔,下句怎么回
为什么说法华经和楞严经是一部经
叉车实操考试有哪些
我想把招商信诺的保险退了,但是我打电话过去
∫[上限1下限1/2]lntdt
探究无机盐对植物的生长的影响,选取两株一样
俯卧撑是倒立撑的必经之路吗
发现了假军车牌照问题如何举报呢?
The income of skilled workers went up. , u
左边第一个是什么字?
鬼王萌妃 殿下 滚远点男主是谁
10月15日英镑对人民币汇率是多少
上饿了么需要什么证件
安德镇中学地址在哪,我要去那里办事,
推荐资讯
潞安在哪个省
我明天早上的火车票是上海到兰州的K376,因今
猪脑髓如何吃法
有没有好看的日剧或美剧推荐
举行的举字怎么写
2013新年祝福语 在会议上说的哪种
沈从文的《边城》爱情故事归纳
排线2.54mm 2mm哪个好
这个算什么种,水头如何,是纯天然的吗?价值
怎么形容一些感情
陋室铭文章以什么两字扣题,以什么两字统领全
一个人一发说说就把你屏蔽是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?