Sql 在从表返回的关键字上组合LIKE和IN

Sql 在从表返回的关键字上组合LIKE和IN,sql,regex,oracle,sql-like,Sql,Regex,Oracle,Sql Like,我有一个带有“描述”字段的表X。然后,我有另一个带有“关键字”的表Y。我想这样做: SELECT * FROM TableX WHERE Description LIKE IN ('%'||(select keywords from TableY)||'%'). 当然,中类似的是无效的。如果删除中的,则子查询返回多个字段时出错。我是否应该像那样使用regexp\u?如果是,查询将是什么样子。不确定您到底在尝试什么。根据我的理解,类似于以下的情况可能很接近: SELECT * FROM [Tab

我有一个带有“描述”字段的表X。然后,我有另一个带有“关键字”的表Y。我想这样做:

SELECT * FROM TableX
WHERE Description
LIKE IN ('%'||(select keywords from TableY)||'%').

当然,中类似的
是无效的。如果删除
中的
,则子查询返回多个字段时出错。我是否应该像
那样使用
regexp\u?如果是,查询将是什么样子。

不确定您到底在尝试什么。根据我的理解,类似于以下的情况可能很接近:

SELECT *
FROM [Table1] t1
WHERE t1.Description IN
(
  SELECT t2.Description
  FROM [Table2] t2
  WHERE t2.Description LIKE '%&someValue%'
);

您可以这样进行连接,但这可能是一个非常缓慢的查询,因为您将无法利用索引的使用

SELECT DISTINCT TableX.*
FROM TableX
INNER JOIN TableY
  ON TableX.Description LIKE (CONCAT('%', TableY.keywords, '%'))

您可能会考虑重新访问您的模式,如果这是一个期望您的应用程序定期运行的查询。

可能尝试做一个连接而不是子选择。代码>选择。。。从TableX连接TableX.Description上的TableY,如('%'| | | TableY.Keyword | |'%')
。双管道允许您在列值前后连接%通配符。我有一个非常小的表,最多可以运行2000行。1
CONCAT
只接受两个参数。使用
|
操作符会更简单。@JeffreyKemp您是对的。我主要在MySQL世界工作,在那里函数接受无限的参数。