使用LIKE ANY时,是否有函数返回行中匹配数组中的哪个短语(array ['%term1%','%term2%'等)?

时间:2019-12-05 19:20:09

标签: sql postgresql wildcard

我希望模式中的所有表与其他表中具有相似名称的其他表匹配。我正在使用以下查询:

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_NAME COL_COUNT  SCHEMA_1_TABLE
table1a    15         table1

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用联接。有点像:

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结合在一起,以便仅检测任何重复项,而不仅仅是指定的重复项。