以下是[产品]表.

我想从[Product]中 Select 包含表_B中列出的单词的记录.

id ProductName
1 ABC Voucher
2 Vitamin Generator
3 Dark Chocolate
4 Fast Charge
5 Remote Controller
6 Power Generator
7 LED TV

下表_B(包含单词列表)

WordList
Generator
Fast
Controller

Required Output:

Sr Full_List
2 Vitamin Generator
4 Fast Charge
5 Remote Controller
6 Power Generator

为方便起见,以下是示例数据的SQL代码:

DROP TABLE IF EXISTS #products

CREATE TABLE #products (
  id INT NOT NULL PRIMARY KEY,
  ProductName VARCHAR(255) NOT NULL
);

INSERT INTO #products (id, ProductName)
VALUES
  (1, 'ABC Voucher'),
  (2, 'Vitamin Generator'),
  (3, 'Dark Chocolate'),
  (4, 'Fast Charge'),
  (5, 'Remote Controller'),
  (6, 'Power Generator'),
  (7, 'LED TV');
DROP TABLE IF EXISTS #Table_B

CREATE TABLE #Table_B (
    WordList VARCHAR(255) NOT NULL
);

INSERT INTO #Table_B (WordList)
VALUES
  ('Generator'),
  ('Fast'),
  ('Controller');

在WHERE条件中带有"or"的LIKE运算符在我的例子中不起作用,因为列表是动态的且很长.

推荐答案

您可以将EXISTS与LIKE结合使用来实现您所需的功能.

 SELECT * FROM #products p
 WHERE EXISTS 
 (
    SELECT * FROM #Table_B b 
    WHERE p.ProductName LIKE '%' + b.WordList + '%'
)

Sql相关问答推荐

Group By子句返回太多行

如何从多行数据中获取一行合并数据?

如何在postgres函数中插入后返回布尔值?

过go 四周未填充的数据,即W50,51,52-SQL

NULL-生成的列中连接的字符串的输入

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

合并分层表SQL中的第一个非空、变化的空位置

按用户和时间列出的SQL Group考勤列表

从单个表达式中的分隔字符串中取平均值

基于开始/结束日期重叠的BigQuery突发行

使用CTE在SNOWFLAKE中创建临时表

SQL 如何根据当前事件和下一个事件确定操作的持续时间?

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?

查询以查找今天和昨天的数据之间的差异以及伪列

为重复的项目编号显示正在处理

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

postgres按组消除分区中的NULLS

连续期间的缺口

使用 SAVE TRANSACTION 时 BEGIN 和 COMMIT 语句的数量不匹配

如何通过存储过程将 root 的下一个子 node 作为父 node ?