0

我想提取表的主键列的名称,如果它也是来自两个表的信息模式的外键:

Student 
std_id  std_name

PHDstudent
std_id   reaserchfield

PHDstudent 中的 std_id 是主键和外键同时引用学生表。

4

3 回答 3

2

运行此查询

SELECT Tab.TABLE_NAME, Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type = 'PRIMARY KEY '
INTERSECT
SELECT Tab.TABLE_NAME, Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type = 'FOREIGN KEY '
于 2013-09-02T14:17:59.100 回答
0
SELECT s.std_id FROM Student s 
INNER JOIN PHDstudent p 
ON s.std_id = p.std_id 

阅读INNER JOINS

于 2013-09-02T12:51:14.293 回答
0

我认为您是在询问主键列名称,而不是您应该使用下面的查询来为您提供主键列名称.....

SELECT column_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1 AND table_name = 'PHDstudent'

于 2013-09-02T14:41:50.937 回答