MySQL FAQ: How can I find all MySQL database tables that have specific column names?
I found the solution on this SO page, and here’s my take on it. First, assuming that you want to copy and paste those column names after you get them, I recommend starting the MySQL command line client like this:
$ mysql -sN -u root -p
The -sN
options get rid of all of the header and formatting information that MySQL typically puts around query results.
Next, this is the MySQL/MariaDB query you want to use:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('column1', 'column2')
AND TABLE_SCHEMA='your_database_name';
Example results and output
For example, I was just looking for a column named langcode
in all Drupal 8 database tables, so I used this query:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('langcode')
AND TABLE_SCHEMA='drupal8';
This returned a very long list of tables. I’ll show only the first five tables, which are listed like this by the MySQL client:
block_content
block_content__body
block_content_field_data
block_content_field_revision
block_content_revision
As mentioned, the -sN
options get rid of all the usual MySQL output formatting, so those are the entire results. If you don’t use those options, your output will look like this instead:
+-----------------------------------+
| TABLE_NAME |
+-----------------------------------+
| block_content |
| block_content__body |
| block_content_field_data |
| block_content_field_revision |
| block_content_revision |
Summary
In summary, if you want to know how to find one or more column names that are contained in all of your MySQL database tables, I hope you find this helpful.