以下查询给出了一个错误:
select
case
when exists (select username from table_name)
then concat('_username_', table_name)
else table_name
end
from information_schema.tables
where table_schema = 'test'
如果表中包含名为“user-name”的列,我基本上想要返回_username_(the table name)
。
我意识到还有另一种方法可以通过选择information_schema.columns
来做到这一点,但我会像上面那样(如果可能的话)这样做。
编辑:我希望我的查询获取数据库测试中的所有表。如果表具有列用户名,那么我希望它返回_username_(followed by table name)
,否则返回表名
答案 0 :(得分:2)
是。左连接到columns
:
select
case when column_name is null then t.table_name
else concat('_username_', t.table_name) end
from information_schema.tables t
left join information_schema.columns c on c.table_name = t.table_name
and c.table_schema = t.table_schema
and column_name = 'user-name'
where t.table_schema = 'test'
这里的要点是:
case
最后,顺便说一句,最好不要使用破折号命名列,即username
而不是user-name
,否则每次使用时都必须将其删除。
答案 1 :(得分:1)
如果不加入表INFORMATION_SCHEMA.COLUMNS
,则无法知道每个表的列。
试试这个问题:
SELECT
CASE
WHEN C.COLUMN_NAME = 'username' THEN CONCAT('_username_',C.TABLE_NAME) ELSE C.COLUMN_NAME END
FROM INFORMATION_SCHEMA.TABLES T
JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
WHERE T.TABLE_SCHEMA = 'test';