如何查找从其他表到特定行的所有引用?

时间:2009-02-17 19:05:37

标签: sql postgresql

所以我有一个地址表,在各种其他表之间共享,例如学校,公园,教堂等。学校,公园等都是地址中一行的外键。

我想知道的是,如果我在地址表中有一个特定的行,是否有办法找出哪个表指向哪一行。基本上就是这样:

SELECT * FROM schools WHERE address_id = 1

但这意味着我必须知道第1行的地址与学校相关联。但是,如果我不知道呢?它可能是其他10个表中的一个......

2 个答案:

答案 0 :(得分:5)

您将不得不查询其他每个表。

我会将其作为UNION查询:

  SELECT id, "schools" as whichTable from schools where address_id=1
  UNION
  SELECT id, "parks" as whichTable from parks where address_id=1
  UNION
  ...

这样您只需运行一个查询并将结果作为您使用的单个数据集取回。

如果您有表格列表(或表格表格),您可以以编程方式生成查询 - 这样可以避免在更改表格时更新查询。

答案 1 :(得分:2)

您正在寻找的 - 假设您拥有符合ISO标准的RDBMS - 是INFORMATION_SCHEMA表集(实际上是视图集,但是嘿)。

你可以找到这样的依赖表:

select 
    cons.CONSTRAINT_NAME 'ConstraintName',
    keys.TABLE_NAME 'PKTable',
    keys.COLUMN_NAME 'PKColumn',
    cols.TABLE_NAME 'FKTable',
    cols.COLUMN_NAME 'FKColumn'
from INFORMATION_SCHEMA.REFERENTI cons
join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cols on cols.CONSTRAINT_NAME = cons.CONSTRAINT_NAME
join INFORMATION_SCHEMA.KEY_COLUMN_USAGE keys on keys.CONSTRAINT_NAME = cons.UNIQUE_CONSTRAINT_NAME

注意:这是一个非常粗略,未经测试的查询。但是你明白了。