试图在我的WHERE子句中使用带有varchar的IN,但遇到整理问题

问题描述 投票:1回答:1

我现在在数据库中有两个表。

Table1
ID        Value1    VText2      VText3      
1         1XX1      text1       text1
2         2XX2      text2       text2
3         3XX3      text3       text3


Table2
ID        OtherValue
1         1XX1
2         2XX2

这是我的表的简化版本。简而言之,表1中的Value1是varchar,而表2中的OtherValue也是Varchar。

我的目标是:

SELECT * From TABLE1 where Value1 in (SELECT OtherValue from Table2)

[执行此操作时,我遇到此错误:

无法解决之间的排序规则冲突在“ SQL_Latin1_General_CP1_CI_AS”和“ SQL_Latin1_General_CP1_CS_AS”中等于运算。

Desired end result:
ID        Value1    VText2      VText3      
1         1XX1      text1       text1
2         2XX2      text2       text2

我相信这是因为我在我的“ WHERE IN”子句中使用了VARCHAR值。有没有办法用varchars做到这一点?

sql sql-server-2012 varchar
1个回答
1
投票

这显然是在发生,因为两个表中的排序规则不同。

您可以手动进行转换。目前尚不清楚您想要什么,但类似这样:

WHERE Value1 COLLATE SQL_Latin1_General_CP1_CS_AS IN (SELECT OtherValue from Table2)

通常,同一数据库中的字符串应具有相同的排序规则。但是,可能会有不同的排序规则-只是这样的错误可能会弹出;)

© www.soinside.com 2019 - 2024. All rights reserved.