我试图找到一种方法,如果可能的话,一起使用IN和LIKE。我想要完成的是放置一个子查询,将一个数据列表提取到一个IN语句中。问题是包含通配符的数据列表。有没有办法做到这一点?
我很好奇。
Example of data in the 2 tables
Parent table
ID Office_Code Employee_Name
1 GG234 Tom
2 GG654 Bill
3 PQ123 Chris
Second table
ID Code_Wildcard
1 GG%
2 PQ%
澄清说明(通过第三方)
由于我看到几个答案似乎没有解决Ziltoid所要求的问题,我想我会尝试澄清我认为他的意思。
在SQL中,“WHERE col IN (1,2,3)
”大致相当于“WHERE col = 1 OR col = 2 OR col = 3
”。
他正在寻找我伪编码为
的东西 WHERE col IN_LIKE ('A%', 'TH%E', '%C')
大致相当于
WHERE col LIKE 'A%' OR col LIKE 'TH%E' OR col LIKE '%C'
正则表达式的答案似乎最接近;其余的看起来很不合适。
答案 0 :(得分:8)
我不确定您正在使用哪个数据库,但是使用Oracle,您可以通过在FROM子句中对子查询进行别名而不是在IN子句中使用它来完成相同的操作。使用您的示例:
select p.*
from
(select code_wildcard
from second
where id = 1) s
join parent p
on p.office_code like s.code_wildcard
答案 1 :(得分:6)
在MySQL
中,使用REGEXP
:
WHERE field1 REGEXP('(value1)|(value2)|(value3)')
Oracle
:
WHERE REGEXP_LIKE(field1, '(value1)|(value2)|(value3)')
答案 2 :(得分:3)
你是说像某些人一样:
select * FROM table where column IN (
SELECT column from table where column like '%%'
)
真的应该写成:
SELECT * FROM table where column like '%%'
当您必须根据主查询中不需要的一组逻辑来提取记录时,使用子选择查询非常有用。
类似的东西:
SELECT * FROM TableA WHERE TableA_IdColumn IN
(
SELECT TableA_IdColumn FROM TableB WHERE TableA_IDColumn like '%%'
)
更新问题:
您不能将IN语句与like语句结合使用:
你必须做三个不同的语句来搜索各种通配符。
答案 3 :(得分:2)
您可以使用LIKE语句获取ID列表,然后在IN语句中使用它。
但是你不能直接组合IN和LIKE。
答案 4 :(得分:2)
也许是这样的?
SELECT DISTINCT
my_column
FROM
My_Table T
INNER JOIN My_List_Of_Value V ON
T.my_column LIKE '%' + V.search_value + '%'
在这个例子中,为了简单起见,我使用了一个带有值的表,但您可以轻松地将其更改为子查询。如果你有一个大的列表(如数万),那么性能可能会很糟糕。
答案 5 :(得分:1)
select *
from parent
where exists( select *
from second
where office_code like trim( code_wildcard ) );
修剪code_wildcard以防万一有尾随空白。
答案 6 :(得分:0)
您可以在子查询中执行Like部分吗?
从TableA中选择*其中X in(从表B中选择A,其中B代表'%123%')
答案 7 :(得分:0)
tsql具有启用全文搜索的表的contains语句。
CONTAINS(Description, '"sea*" OR "bread*"')
答案 8 :(得分:0)
如果我正确地阅读了这个问题,我们希望所有具有Office_code的Parent行与“Second”表中的任何Code_Wildcard匹配。
至少在Oracle中,此查询实现了:
SELECT *
FROM parent, second
WHERE office_code LIKE code_wildcard;
我错过了什么吗?