作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我在 MS Access 中当前存在一个糟糕的查询,我正尝试在 SQL Server 中重写该查询。基本上,我获取来自文本文件的数据,我试图根据特定条件过滤该文本文件。
我的问题在于数据在文本文件中的存储方式。我的表与此类似:
Table1
BusinessDate DateTime
Amount money
User1 varchar
User2 varchar
User3 varchar
User4 varchar
... varchar
User16 varchar
我有一个数据表,其中包含日期,然后有 16 列,其中包含由不同用户添加的数据。该表中还有一些其他字段,但对于此问题来说它们是不必要的。
当前查询会过滤 15 个与 userId 类似的值。
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)
可以做这样的事情吗?如果是这样,应该使用什么语法,因为我完全被难住了。
最佳答案
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)
关于带有 LIKE 和 IN 的 SQLWhere 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8186801/
我是一名优秀的程序员,十分优秀!