select-当子查询里面加上Chinese_PRC_CI_AS的排序规则后,某些数据却查不出来

问题描述

当子查询里面加上Chinese_PRC_CI_AS的排序规则后,某些数据却查不出来

代码如下:

 SELECT * from  dbo.VW_msSyInfo_zy
WHERE syh  collate Chinese_PRC_CI_AS not in
(select Syh from dbo.msSyInfo_zy)
and indate >'2015-01-01'

当没加collate Chinese_PRC_CI_AS的时候会报错

 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_BIN" 之间的排序规则冲突。

加上collate Chinese_PRC_CI_AS时查出来的数据和实际数据量差之千里

请问各位高手,有没有办法解决此类问题

解决方案

数据库排序规则(Collate):Chinese_PRC_CI_AS
"Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI"

解决方案二:

两个表的排序规则一定要一致。可以先把其中一个改过来,查询完后,再改过去。
修改排序规则:ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS

解决方案三:

我这边没有具体实例,可以试试这样:
SELECT * from dbo.VW_msSyInfo_zy

WHERE syh collate Chinese_PRC_CI_AS not in
(select Syh collate Chinese_PRC_CI_AS from dbo.msSyInfo_zy)

and indate >'2015-01-01'

解决方案四:

两个数据库字段排序方式不同,要么后台数据库修改,或者尝试楼上说的。不知道有没有其他办法。同问。

时间: 2022-12-10

select-当子查询里面加上Chinese_PRC_CI_AS的排序规则后,某些数据却查不出来的相关文章

生产库中遇到mysql的子查询

使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就由于碰到了这个问题: select  i_id, sum(i_sell) as i_sell from table_data where i_id in (select i_id from table_data where Gmt_create

对MySQL子查询的简单改写优化_Mysql

使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就由于碰到了这个问题: select i_id, sum(i_sell) as i_sell from table_data where i_id in (select i_id from table_data where Gmt_create

【MySQL】子查询之一

MySQL 从版本4 开始支持 SQL 标准要求的所有子查询格式和操作,同时扩展了特有的几种特性.本文会介绍子查询的类型以及相关的注意点. 一 什么是子查询     子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.如: SELECT * FROM t1  WHERE vid in  (SELECT  vid FROM t2); 二 MySQL 子查询分类       根据子查询的返回数据形式,mysql 子查询可以分为以下几类: a  标量子查询      

MySQL中列子查询与行子查询操作的学习教程_Mysql

MySQL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MySQL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) 列子查询中使用 IN.ANY.SOME 和 ALL 操作符 由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= <

都是标量子查询惹的祸

都是标量子查询惹的祸 系统又报了一个跑的慢的sql语句,看图就知道这个很恐怖的,已经跑了1天了,还需要跑6个月的时间,   把sql语句拿出来瞅瞅: --201406 XX select SUM(UNPOSTING_AMT_CYC) 分期未结清余额, SUM(greatest(nvl(BAL_TOTAL,0),0)) 余额,COUNT(1),DELQ_LEVEL_CI,city,FQ_TOTAL, CASE WHEN greatest(nvl(BAL_TOTAL,0),0) 500 THEN '

SQL多表链接查询、嵌入SELECT语句的子查询技术

高级查询技术主要是涉及多个表的链接查询技术.嵌入SELECT语句的子查询技术,把多个查询联合起来的联合技术等. 1. 连接查询 需要同时从两个或者连个以上的表中检索数据.链接就是允许同时从两个表或者两个以上的表中检索数据,指定这些表中的某个或者某些列作为连接条件.在SQL Server中,可以使用两种连接语法的形式,一种是ANSI链接语法形式,这是连接条件出现在FROM子句中;另外一种SQL Server链接语法形式,这是连接条件出现在WHERE条件中. 1. ANSI链接 链接错做可以同时查询

Oracle数据库入门之多表连接与子查询

Oracle表连接 概述:SQL/Oracle使用表连接从多个表中查询数据 格式:select 字段列表 from table1,table2 where table1.column1=table2.column2; 说明:当被连接的多个表中存在同名字段时,必须在该字段前加上"table."作为前缀 如果没有限定where连接条件,否则就会出现笛卡尔集的不现实或没有实用意义的结果 举例:select empno, ename, sal, emp.deptno, dname, loc f

sqlserver子查询报错

  sqlserver跟oracle对比,如果涉及到的子查询,则相应的表名.字段就必须命名一个别名才能执行.主要有两种情况: 1.查询sql里面只有简单子查询不包含分组.求和等待 eg:elect * from (select com_id from company) 如此会报错,必须加上外层加上别名,里层的select * from company这里可以加别名,也可以不加正确:select * from ( select com_id from company) a 2.查询的sql里面包含

MySQL 第六篇:索引与子查询

我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论. 子查询 子查询,从原有的查询语句中 嵌入新的查询 来得到我们想要的结果,也可称为嵌套查询. 一.where 型 1.查询课程名为"Java"的学生信息 -- 使用关联查询实现 SELECT s.* FROM students s, class c WHERE s.class_id = c.class_id AND c.class_name = 'JA