SQL技术问询:如何从Product表筛选含Table_B词汇的记录?
筛选包含动态词汇列表中任意词汇的产品记录
我们需要从Product表中筛选出ProductName字段包含Table_B词汇列表中任意词汇的记录。由于词汇列表是动态更新且条目较多,无法通过带OR的LIKE运算符实现。
样本表
Product表
| id | ProductName |
|---|---|
| 1 | ABC Voucher |
| 2 | Vitamin Generator |
| 3 | Dark Chocolate |
| 4 | Fast Charge |
| 5 | Remote Controller |
| 6 | Power Generator |
| 7 | LED TV |
Table_B(词汇列表)
| WordList |
|---|
| Generator |
| Fast |
| Controller |
期望输出
| Sr | Full_List |
|---|---|
| 2 | Vitamin Generator |
| 4 | Fast Charge |
| 5 | Remote Controller |
| 6 | Power Generator |
样本数据SQL代码
创建并填充Product临时表
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');
创建并填充Table_B临时表
DROP TABLE IF EXISTS #Table_B CREATE TABLE #Table_B ( WordList VARCHAR(255) NOT NULL ); INSERT INTO #Table_B (WordList) VALUES ('Generator'), ('Fast'), ('Controller');
实现查询的SQL语句
SELECT p.id AS Sr, p.ProductName AS Full_List FROM #products p JOIN #Table_B b ON p.ProductName LIKE '%' + b.WordList + '%' GROUP BY p.id, p.ProductName ORDER BY p.id;
说明
- 通过
JOIN关联两张表,利用LIKE '%' + b.WordList + '%'匹配包含目标词汇的产品名称 - 使用
GROUP BY避免同一产品因匹配多个词汇而重复出现 - 按
id排序保证输出顺序与期望一致
内容的提问来源于stack exchange,提问作者Teknas
相关产品推荐
相关产品推荐

