2017-06-26 44 views
1

我有以下查询返回0结果,我知道这是错误的。但不知道什么是我的语法。查询SQL IN中的字符串列表

select * from SJT_USER where SJT_USER_NAME in 
    (select USER_NAME from NON_MEMBER); 

SJT_USER_NAMENCHAR(255 CHAR)

USER_NAMENVARCHAR2(255 CHAR)

我猜我需要做的NVARCHAR2为NCHAR一些转换。

+0

这两个答案到目前为止可能解决您的问题,但如果这不只是一次性,你应该考虑使用外键和加入两个表。 –

回答

0

尝试使用SQL Cast,以便将苹果与苹果进行比较。我不能确定哪个DBMS您使用,但语法应该与此类似:

select * from SJT_USER where SJT_USER_NAME in (select CAST(USER_NAME AS NVARCHAR2) from NON_MEMBER); 
0

CHAR或NCHAR是固定长度,使其与SJT_USER_NAME由空格填充,使其充满了255个字符。比较两者时有两种选择。您可以修剪或使用RPAD:

select * from SJT_USER where TRIM(SJT_USER_NAME) in (select USER_NAME from NON_MEMBER); 

select * from SJT_USER where TRIM(SJT_USER_NAME) in (select RPAD(USER_NAME,255) from NON_MEMBER); 

后来,如果你有一个索引SJT_USER_NAME可能是可取的。中频表现并不值得关注我通常更喜欢在比较的两边都有一个TRIM,以确保安全。