信息模式重复 - 指定要在 SELECT 中查询的数据库
Information Schema Duplicates - Specify which database to query in SELECT
我的服务器上有两个名称不同的数据库,但它们都有一个名为 Clients
的 table。当我 运行 一个信息模式从两个数据库中查询它 returns 列时,所以当我只想要一个时,我得到了重复项。
示例:
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE table_name = 'Clients'
我得到了重复的列,所以 First_Name
出现了两次,因为它从两个数据库中的 Clients
table 返回了列。
我的问题是:
有没有一种方法可以在 SELECT 语句中指定查询哪个数据库,以便它只 returns 我想要的列?例如:
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE db_name = 'DB1' AND table_name = 'Clients'
您正在查找 TABLE_SCHEMA
列。
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = 'DB1' AND
TABLE_NAME = 'Clients'
仅供参考,这就是我在 desc INFORMATION_SCHEMA.COLUMNS;
时得到的结果
+--------------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| COLUMN_NAME | varchar(64) | NO | | | |
| ORDINAL_POSITION | bigint(21) unsigned | NO | | 0 | |
| COLUMN_DEFAULT | longtext | YES | | NULL | |
| IS_NULLABLE | varchar(3) | NO | | | |
| DATA_TYPE | varchar(64) | NO | | | |
| CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES | | NULL | |
| CHARACTER_OCTET_LENGTH | bigint(21) unsigned | YES | | NULL | |
| NUMERIC_PRECISION | bigint(21) unsigned | YES | | NULL | |
| NUMERIC_SCALE | bigint(21) unsigned | YES | | NULL | |
| DATETIME_PRECISION | bigint(21) unsigned | YES | | NULL | |
| CHARACTER_SET_NAME | varchar(32) | YES | | NULL | |
| COLLATION_NAME | varchar(32) | YES | | NULL | |
| COLUMN_TYPE | longtext | NO | | NULL | |
| COLUMN_KEY | varchar(3) | NO | | | |
| EXTRA | varchar(30) | NO | | | |
| PRIVILEGES | varchar(80) | NO | | | |
| COLUMN_COMMENT | varchar(1024) | NO | | | |
| GENERATION_EXPRESSION | longtext | NO | | NULL | |
+--------------------------+---------------------+------+-----+---------+-------+
我的服务器上有两个名称不同的数据库,但它们都有一个名为 Clients
的 table。当我 运行 一个信息模式从两个数据库中查询它 returns 列时,所以当我只想要一个时,我得到了重复项。
示例:
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE table_name = 'Clients'
我得到了重复的列,所以 First_Name
出现了两次,因为它从两个数据库中的 Clients
table 返回了列。
我的问题是:
有没有一种方法可以在 SELECT 语句中指定查询哪个数据库,以便它只 returns 我想要的列?例如:
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE db_name = 'DB1' AND table_name = 'Clients'
您正在查找 TABLE_SCHEMA
列。
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = 'DB1' AND
TABLE_NAME = 'Clients'
仅供参考,这就是我在 desc INFORMATION_SCHEMA.COLUMNS;
+--------------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| COLUMN_NAME | varchar(64) | NO | | | |
| ORDINAL_POSITION | bigint(21) unsigned | NO | | 0 | |
| COLUMN_DEFAULT | longtext | YES | | NULL | |
| IS_NULLABLE | varchar(3) | NO | | | |
| DATA_TYPE | varchar(64) | NO | | | |
| CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES | | NULL | |
| CHARACTER_OCTET_LENGTH | bigint(21) unsigned | YES | | NULL | |
| NUMERIC_PRECISION | bigint(21) unsigned | YES | | NULL | |
| NUMERIC_SCALE | bigint(21) unsigned | YES | | NULL | |
| DATETIME_PRECISION | bigint(21) unsigned | YES | | NULL | |
| CHARACTER_SET_NAME | varchar(32) | YES | | NULL | |
| COLLATION_NAME | varchar(32) | YES | | NULL | |
| COLUMN_TYPE | longtext | NO | | NULL | |
| COLUMN_KEY | varchar(3) | NO | | | |
| EXTRA | varchar(30) | NO | | | |
| PRIVILEGES | varchar(80) | NO | | | |
| COLUMN_COMMENT | varchar(1024) | NO | | | |
| GENERATION_EXPRESSION | longtext | NO | | NULL | |
+--------------------------+---------------------+------+-----+---------+-------+