当使用 LIKE ANY(数组 ['%term1%'、'%term2%' 等])时,是否有函数 return 数组中的哪个短语与行匹配?
Is there a function to return which phrase in array the row matched when using LIKE ANY (array['%term1%', '%term2%', etc.])?
我希望我的架构中的所有 table 与来自不同架构的具有相似名称的其他 table 的列表相匹配。我正在使用以下查询:
SELECT TABLE_NAME, COUNT(COLUMN_NAME) ColCount
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'schema_2' and TABLE_NAME LIKE ANY (array[
'%table1%',
'%table2%',
'%table3%',
'%table4%',
'%table5%'])
我想在输出中添加另一列,它指定 schema_2 中的 table 匹配数组中的哪个名称,即
TABLE_NAME COL_COUNT SCHEMA_1_TABLE
table1a 15 table1
有办法吗?
您可以尝试使用联接。有点像:
WITH a AS (SELECT unnest(array['%table1%','%table2%','%table3%','%table4%','%table5%'])
AS table)
SELECT
isc.TABLE_NAME,
COUNT(isc.COLUMN_NAME),
REPLACE(a.table,'%','')
FROM
INFORMATION_SCHEMA.COLUMNS isc
LEFT JOIN a ON (isc.TABLE_NAME LIKE a.table)
WHERE
isc.TABLE_SCHEMA = 'schema_2'
AND a.table IS NOT NULL
GROUP BY
isc.TABLE_NAME,
a.table
您还可以将 INFORMATION_SCHEMA.COLUMNS 与 INFORMATION_SCHEMA.TABLES 结合起来,以便仅检测任何重复项,而不仅仅是指定的重复项。
我希望我的架构中的所有 table 与来自不同架构的具有相似名称的其他 table 的列表相匹配。我正在使用以下查询:
SELECT TABLE_NAME, COUNT(COLUMN_NAME) ColCount
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'schema_2' and TABLE_NAME LIKE ANY (array[
'%table1%',
'%table2%',
'%table3%',
'%table4%',
'%table5%'])
我想在输出中添加另一列,它指定 schema_2 中的 table 匹配数组中的哪个名称,即
TABLE_NAME COL_COUNT SCHEMA_1_TABLE
table1a 15 table1
有办法吗?
您可以尝试使用联接。有点像:
WITH a AS (SELECT unnest(array['%table1%','%table2%','%table3%','%table4%','%table5%'])
AS table)
SELECT
isc.TABLE_NAME,
COUNT(isc.COLUMN_NAME),
REPLACE(a.table,'%','')
FROM
INFORMATION_SCHEMA.COLUMNS isc
LEFT JOIN a ON (isc.TABLE_NAME LIKE a.table)
WHERE
isc.TABLE_SCHEMA = 'schema_2'
AND a.table IS NOT NULL
GROUP BY
isc.TABLE_NAME,
a.table
您还可以将 INFORMATION_SCHEMA.COLUMNS 与 INFORMATION_SCHEMA.TABLES 结合起来,以便仅检测任何重复项,而不仅仅是指定的重复项。