SQL LIKE和IN的子句

时间:2011-11-18 17:56:41

标签: sql sql-server

所以我有一个可怕的查询,我试图在SQL Server中重写当前存在于MS Access中。基本上我得到的数据来自我试图根据特定标准过滤掉的文本文件。

我的问题是数据在文本文件中的方式。我的表与此类似:

Table1
BusinessDate   DateTime
Amount         money
User1          varchar
User2          varchar
User3          varchar
User4          varchar
...            varchar
User16         varchar

我有一个数据表,其中包含日期,然后有16列,其中的数据已由其他用户添加。此表中还有其他一些字段,但对于此问题它们不是必需的。

当前查询会对userId类似的15个值进行过滤。

SELECT *
FROM Table1
WHERE (User1 Like 'AB%' Or User1 Like 'CD%' Or User1 Like 'EF%'...)
OR (User2 Like 'AB%' Or User2 Like 'CD%' Or User2 Like 'EF%'...)

我要做的是将类似值存储在表中,以便我可以在查询中加入它们。我不知道所有的值,所以我需要使用通配符,因为它可能是字母数字字符的任何可能组合。所以我会有一个这样的表:

ValueTable
AB%
CD%
EF%
HI%
...

然后我的查询会与此类似,但我不认为这是可能的

SELECT *
FROM Table1
WHERE User1 Like IN (SELECT Value FROM ValueTable)
OR  User2 Like IN (SELECT Value FROM ValueTable)

有可能做这样的事吗?如果是这样,应该使用什么语法,因为我完全被难倒了。

1 个答案:

答案 0 :(得分:12)

SELECT *
FROM   Table1
WHERE  EXISTS (SELECT *
               FROM   ValueTable
               WHERE  User1 Like Value
                       OR User2 Like Value)  

或(2008语法)

SELECT *
FROM   Table1
WHERE  EXISTS (SELECT *
               FROM   (VALUES(User1),
                             (User2),
                             (User3),
                             (User4),
                             /* ... */
                             (User15),
                             (User16) ) Users(U)
                      JOIN ValueTable
                        ON U Like Value)