是否可以在数据库中的所有表中搜索列中的特定值?我的数据库中有30个表。并非所有人都使用FK employee_no。在包含employee_no列的所有表中,并非所有表都会为每个员工输入一条记录。
我想获取employee_no列包含值6172817的所有表的列表。
我知道
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like '%employee_no'
将返回列名为employee_no的所有表,但现在我希望employee_No的所有表值为6172817
我试过了
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE employee_no like '%6172817'
这可能吗?
答案 0 :(得分:0)
所以这就是我到目前为止(尽管是在postegresql中制作的,所以您需要转换为mysql):
DO $$
DECLARE
rowt text; -- cursor retun
rowf text; -- name of the current table that meets our requirement
rowfz text; -- formated rout
cr CURSOR FOR (SELECT t.table_name::text
FROM information_schema.tables t
INNER JOIN information_schema.columns c
ON c.table_name = t.table_name
AND c.table_schema = t.table_schema
WHERE c.column_name = 'employee_no' -- The column you're looking for here
AND t.table_schema NOT IN ('information_schema', 'my_db') -- Add any unwanted DB's
-- separated by comas
AND t.table_type = 'BASE TABLE'
ORDER BY t.table_name);
BEGIN
FOR rowt IN cr LOOP
rowfz := REPLACE (rowfz::text,'(','');
rowfz := REPLACE (rowfz::text,')','');
EXECUTE (concat(' SELECT ''',rowfz, ''' FROM ', rowfz,' WHERE ', rowfz,
'.employee_no LIKE '''%6172817''' ')) INTO rowf;
IF rowf IS NOT NULL -- prints out only the valid(not null) table names
RAISE NOTICE '%',rowf;
END IF;
END LOOP;
END $$;
这将告诉您确切的表有您想要的表,但是不会在外观整洁的表中显示(您可能需要滚动显示结果文本)。