Redshift SQL搜索表中所有字段的值

写一段Redshift的SQL,检查一个表格里所有的字符串字段是否有值等于keyword的单元格,如果有,输出一张表,包含Schema名、表名、字段名和值,输出结果集不包含重复数据。

sql 复制代码
WITH column_info AS (
  -- 获取表的所有字符串类型字段
  SELECT 
    ordinal_position,
    table_schema,
    table_name,
    column_name
  FROM information_schema.columns 
  WHERE table_schema = 'your_schema_name'  -- 替换为实际的schema名
    AND table_name = 'your_table_name'     -- 替换为实际的表名
    AND data_type IN ('character', 'character varying', 'text', 'varchar', 'char')
),
check_queries AS (
  -- 为每个字符串字段生成检查查询(使用LIMIT 1)
  SELECT 
    ordinal_position,
    table_schema,
    table_name,
    column_name,
    'SELECT * FROM (SELECT ''' || table_schema || ''' AS schema_name, ''' || table_name || ''' AS table_name, ''' || column_name || ''' AS column_name, ' || column_name || ' AS value FROM ' || table_schema || '.' || table_name || ' WHERE ' || column_name || ' = ''keyword'' LIMIT 1)' || CASE ordinal_position WHEN 1 THEN ';' ELSE ' UNION ALL ' END AS query_text
  FROM column_info
)
-- 所有检查查询并合并结果
SELECT 
    query_text
FROM check_queries
ORDER BY ordinal_position DESC;

主要优化点:

  1. 使用LIMIT 1替代DISTINCT:每个字段的查询一旦找到第一个匹配项就停止扫描
  2. 减少数据扫描:不需要扫描整个字段的所有值来去重
  3. 更快的响应:特别是对于大表,性能提升显著

适用场景:

  • 只需要知道哪些字段包含关键词,而不需要所有匹配记录
  • 关注查询性能,特别是大数据量表
  • 只需要一个存在的证明,而不需要统计数量

如果确实需要所有唯一值(而不是仅确认存在性),可以使用以下折中方案:

sql 复制代码
-- 对每个字段单独查询,但使用LIMIT来限制返回数量
SELECT * FROM (
SELECT 'your_schema' AS schema_name, 'your_table' AS table_name, 'column1' AS column_name, column1 AS value
FROM your_schema.your_table 
WHERE column1 = 'keyword'
LIMIT 10)  -- 限制每个字段最多返回10条记录

UNION ALL

SELECT * FROM (
SELECT 'your_schema', 'your_table', 'column2', column2
FROM your_schema.your_table 
WHERE column2 = 'keyword'
LIMIT 10
)
-- 继续添加其他字段...

这种方案在性能和结果完整性之间取得了平衡。

相关推荐
MediaTea1 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z1 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue1 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅2 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
LemonSmile_2 小时前
CC Switch 配置 Claude Code 接入 阿里云百炼
阿里云·云计算·claude·百炼
MATLAB代码顾问3 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天3 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
yaodong5183 小时前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
jiushiapwojdap3 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
笨笨饿3 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发