find columns in all database - mysql

If I have a database some_database with multiples tables like:
table_one
table_two
table_three
where
table_one has CPV_one
table_two has CPV_two
table_three has CPV_three
I need to find all tables that have a column like '%CPV%'
This can be done by sql query? I want to avoid check all tables one by one.

You can query information_schema to get a list of each table in your database with a matching column name:
SELECT
TABLE_NAME, COLUMN_NAME
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'SOME_DATABASE'
AND COLUMN_NAME LIKE '%CPV%'
EDIT (selecting only the TABLE_NAME column)
As pointed out in a comment, if you want to select only the name of the table (without the list of columns that match), you should also use the DISTINCT keyword - otherwise a duplicate row will be returned for the same table for each column that matches:
SELECT
DISTINCT TABLE_NAME
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'SOME_DATABASE'
AND COLUMN_NAME LIKE '%CPV%'

SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '%CPV%'
AND TABLE_SCHEMA='YourDatabase';

How about querying the MySQL information_schema?
SELECT TABLE_NAME
FROM information_schema.COLUMNS
WHERE COLUMN_NAME LIKE '%CPV%'

Here you have the code to get the table names with the needed condition:
SELECT DISTINCT TABLE_NAME
FROM information_schema.Columns
WHERE COLUMN_NAME LIKE '%CPV%';
For more details on the INFORMATION SCHEMA take a look here
And for COLUMNS table here

Related

Get Table Name, Column Name, Data Type & Character Maximum Lenght mySQL

I have a database in MySQL called "Test Database" and I want to create a query to get all database's columns with the following characteristics:
First column - Table name
Second column - Column name
Third column - Type
Forth column - Maximum length
I used the following queries separately to get what i want:
Get Table Name:
Select Table_Name from INFORMATION_SCHEMA.Tables
Get Columns Name:
Select Column_Name from INFORMATION_SCHEMA.Columns
Get Column Type:
Select Data_Type from INFORMATION_SCHEMA.Columns
Get Columns Size:
Select Character_Maximum_Length from INFORMATION_SCHEMA.Columns
But I did not manage to merge this into one query to get the below result:
Any help will be greatly appreciated!
You can put more than one column in a SELECT statement..
Select Table_Name, Column_Name, Data_Type, Character_Maximum_Length
from INFORMATION_SCHEMA.Columns
Use AS if you want to rename the columns you see (SELECT table_name AS "Table Name" .... I'd recommend not putting spaces in them though
If that is the entire table, then you could simplify your query easily as:
SELECT * FROM INFORMATION_SCHEMA.Columns
this will get all columns that you need.
If you want to be more specific you could try this variant:
SELECT Table_Name AS TableName, Column_Name as ColumnName, Data_Type as
DataType, Character_Maximum_Length as Character_Maximum_Length FROM
INFORMATION_SCHEMA.Columns
I hope this will help you!

To pull count of a specific column of 10k tables in MySQL

SELECT Count(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TableName' AND TABLE_SCHEMA = 'DatabaseName'
I tried this to pull count from a single table.
How to achieve this with multiple tables which is more than 10k
Remove your filter condition of Table name AS below
SELECT Count(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'DatabaseName'

Get the different column names on two tables MySQL

I have two tables with almost identical column names :
Here's a sample table
I want to get the columns names highlighted in red.
Any idea?
Try this:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema' AND
TABLE_NAME = 'table2' AND
COLUMN_NAME NOT IN (
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema' AND
TABLE_NAME = 'table1');
The above query returns the column names of table2 not present in table1.
Demo here

Copy Result of a Query into another table

I have selected all tables using this query
SELECT TABLE_SCHEMA from information_schema.tables
I want to copy the result of this query to another table info in its column table_names
I want to do this in 1 query. Is this possible?
Thank you in advance :)
Maybe this,but not tested
INSERT INTO info (table_names) SELECT TABLE_SCHEMA FROM information_schema.tables
INSERT INTO Info
SELECT TABLE_SCHEMA from information_schema.tables
select * from Info
But SELECT TABLE_SCHEMA from information_schema.tables
will return dbo, etc, schema names, if you want to get table names use
select name from sys.tables
so use
INSERT INTO Info
SELECT name
FROM sys.tables
See http://www.blackwasp.co.uk/SQLSelectInsert.aspx for example for insert into with select, there're many other samples.

How to identify a column with name exist in all tables?

i want to query a database which has huge tables for the columns with specific name
ex: fetch all the tables which has column name like 'name'
Thanks.
Try
SELECT table_name -- you might want to add DISTINCT if you use pattern matching with LIKE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND column_name = 'name' -- or column_name LIKE '%name%'
Here is SQLFiddle demo