【发布时间】:2014-04-19 16:22:09
【问题描述】:
我正在尝试查询数据库架构以检索有关列配置的信息。包含在结果集中我想要一个引用列的外键列表。希望这里有人可能会在我的查询中发现一个错误,它总是返回一个空集。
SELECT
C.ORDINAL_POSITION AS `position`,
C.COLUMN_DEFAULT AS `default`,
C.IS_NULLABLE AS `nullable`,
C.CHARACTER_MAXIMUM_LENGTH AS `max`,
C.NUMERIC_PRECISION AS `size`,
C.NUMERIC_SCALE AS `scale`,
C.COLUMN_TYPE AS `type`,
U.TABLE_NAME AS `referenced`,
CASE C.COLUMN_NAME WHEN NULL
THEN U.REFERENCED_COLUMN_NAME
ELSE C.COLUMN_NAME
END AS `name`
FROM INFORMATION_SCHEMA.COLUMNS AS C
RIGHT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS U
ON U.REFERENCED_TABLE_SCHEMA = C.TABLE_SCHEMA
AND U.REFERENCED_TABLE_NAME = C.TABLE_NAME
WHERE C.TABLE_NAME = 'my_table'
AND C.TABLE_SCHEMA = 'my_database'
ORDER BY `position` ASC
【问题讨论】:
-
你应该使用
LEFT JOIN,而不是RIGHT JOIN。 -
@Barmar 左连接不会只返回一个引用吗?
-
它们都返回所有匹配项。不同之处在于没有匹配时会发生什么——左连接返回第一个表中的所有行,右连接返回第二个表中的所有行。
-
@Barmar 也许我自己搞糊涂了。我知道左边会有一个条目,右边会有零个或多个条目。我想我需要一个右连接,从右边返回值(左边为空),但包括公用表名:/