如果我必须搜索某些数据,我可以使用通配符并使用简单的查询 -
SELECT * FROM TABLE WHERE COL1 LIKE '%test_string%'
而且,如果我必须查看许多我可以使用的值 -
SELECT * FROM TABLE WHERE COL1 IN (Select col from AnotherTable)
但是,是否可以将两者结合使用。也就是说,查询不仅执行WHERE IN,还执行类似于WHERE LIKE的操作?一个查询,它不会查看一组值,而是通过一组值使用通配符进行搜索。
如果不清楚,我可举个例子。让我知道。感谢。
示例 -
让我们考虑 -
AnotherTable -
id | Col
------|------
1 | one
2 | two
3 | three
表 -
Col | Col1
------|------
aa | one
bb | two
cc | three
dd | four
ee | one_two
bb | three_two
现在,如果我可以使用
SELECT * FROM TABLE WHERE COL1 IN (Select col from AnotherTable)
这给了我 -
Col | Col1
------|------
aa | one
bb | two
cc | three
但如果我需要怎么办 -
Col | Col1
------|------
aa | one
bb | two
cc | three
ee | one_two
bb | three_two
我想这应该可以帮助你理解我在一起使用WHERE IN和LIKE的意思
答案 0 :(得分:4)
SELECT *
FROM TABLE A
INNER JOIN AnotherTable B on
A.COL1 = B.col
WHERE COL1 LIKE '%test_string%'
根据提供的示例代码,尝试一下。最终的select语句按您的要求显示数据。
create table #AnotherTable
(
ID int IDENTITY(1,1) not null primary key,
Col varchar(100)
);
INSERT INTO #AnotherTable(col) values('one')
INSERT INTO #AnotherTable(col) values('two')
INSERT INTO #AnotherTable(col) values('three')
create table #Table
(
Col varchar(100),
Col1 varchar(100)
);
INSERT INTO #Table(Col,Col1) values('aa','one')
INSERT INTO #Table(Col,Col1) values('bb','two')
INSERT INTO #Table(Col,Col1) values('cc','three')
INSERT INTO #Table(Col,Col1) values('dd','four')
INSERT INTO #Table(Col,Col1) values('ee','one_two')
INSERT INTO #Table(Col,Col1) values('ff','three_two')
SELECT * FROM #AnotherTable
SELECT * FROM #Table
SELECT * FROM #Table WHERE COL1 IN(Select col from #AnotherTable)
SELECT distinct A.*
FROM #Table A
INNER JOIN #AnotherTable B on
A.col1 LIKE '%'+B.Col+'%'
DROP TABLE #Table
DROP TABLE #AnotherTable
答案 1 :(得分:1)
是。使用关键字AND:
SELECT * FROM TABLE WHERE COL1 IN (Select col from AnotherTable) AND COL1 LIKE '%test_string%'
但在这种情况下,最好使用JOIN语法:
SELECT TABLE.* FROM TABLE JOIN AnotherTable on TABLE.COL1 = AnotherTable.col WHERE TABLE.COL1 LIKE '%test_string'
答案 2 :(得分:1)
不是因为LIKE子句中的每个元素都需要通配符,并且没有办法用IN子句
答案 3 :(得分:1)
模式匹配运算符是:
IN
,针对值列表,LIKE
,针对模式,REGEXP
/RLIKE
针对正则表达式(包括通配符和替代方法,因此最接近“通过一组valuws使用通配符”,例如(ab)+a|(ba)+b
将匹配所有字符串aba ... ba或者bab ... ab),FIND_IN_SET
获取集合中字符串的索引(用逗号分隔的字符串表示),SOUNDS LIKE
根据发音方式和MATCH ... AGAINST
用于全文匹配。 这是关于字符串匹配的,尽管还有其他string functions。
对于该示例,您可以尝试加入Table.Col1 LIKE CONCAT(AnotherTable.Col, '%')
,但性能可能会很糟糕(假设它有效)。
答案 4 :(得分:1)
尝试交叉连接,以便您可以将AnotherTable中的每一行与表格中的每一行进行比较:
SELECT DISTINCT t.Col, t.Col1
FROM AnotherTable at
CROSS JOIN Table t
WHERE t.col1 LIKE ('%' + at.col + '%')
为了安全起见,您需要在at.col中删除通配符。请尝试this answer。
答案 5 :(得分:1)
如果我正确理解了这个问题,那么当“Table.Col1”是IN“AnotherTable.Col”时你想要“Table”中的行,而当Col1 IS LIKE'%some_string%'时你也想要行。
如果是这样,你想要像:
SELECT
t.*
FROM
[Table] t
LEFT JOIN
[AnotherTable] at ON t.Col1 = at.Col
WHERE (at.Col IS NOT NULL
OR t.Col1 LIKE '%some_string%')
答案 6 :(得分:0)
这样的东西?
SELECT * FROM TABLE
WHERE
COL1 IN (Select col from AnotherTable)
AND COL1 LIKE '%test_string%'
答案 7 :(得分:0)
你在考虑像EXISTS这样的东西吗?
SELECT * FROM TABLE t WHERE EXISTS(从AnotherTable t2中选择col,其中t2.col = t.col,如'%test_string%')