2012-06-28 82 views
0

我使用JPA和mysql。 每個表都有實體類。我有四個表。如何獲得外鍵使用表名

表1:student_table

studentId(PK), studentName 
1    jack 
2    robert 
3    tom 
4    smith 

表2:roll_table

rollId(PK), studentId(FK) 
10001   1 
10002   2 
10003   3 
10004   4 

表3:address_table

addressId(PK) City   studentId(FK) 
1    Washngton  1 
2    NewYork1  2 
3    Newyork2  3 
4    Wasington2  4 

表4:contact_table

------------------------------------------------ 
contactId(pk) phoneNumber email studentId(FK) 
------------------------------------------------ 

---------------------------------------------- 

基表是 'student_table'。 'studentId'是這張表的主要關鍵。

其餘3個表格已將此studentId用作外鍵。 共3個表格包含數據。一張桌子沒有任何數據。

我需要編寫「studentId = 2使用表名和表查詢,如果存在其他表中的數據計算。 否則沒有任何其他邏輯來獲取這些信息。

就像現在的studentId = 2使用兩個表。所以結果是*(roll_table,address_table)*
假設接觸表有數據與studentId = 2, 那麼結果是*(roll_table,address_table,contact_table)*

幫助我。 謝謝提前

+0

瞭解[SQL連接(http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins .html):你想使用外部連接。 – eggyal

回答

0

試着左加入,幫助您從lefttable(studentName)顯示所有的記錄,甚至有右表中沒有匹配(roll_table,address_table,contact_table)

SELECT student_table.studentId,student_table.studentName 
FROM student_table 
LEFT JOIN roll_table ON student_table.studentId = roll_table.studentId 
LEFT JOIN address_table ON student_table.studentId = address_table.studentId 
LEFT JOIN contact_table ON student_table.studentId = contact_table.studentId 
+0

感謝您的回覆。假設我在1000個表中使用了外鍵...我需要添加更多的行數query.is對不對? – jackrobert

+0

我希望studentId只使用表名(存在數據),當執行查詢時。這裏有3個表引用studentId。但兩個表格數據指向student_table。在將來我不知道,有多少表引用studentId – jackrobert

+0

在這種情況下使用內部連接,而不是左連接,只有當顯示匹配的學生ID – mintokyo

0

嘗試此查詢

SELECT * FROM information_schema.KEY_COLUMN_USAGE 
     WHERE REFERENCED_TABLE_NAME = 'Your base table name' 
     AND TABLE_SCHEMA='DataBaseName' 
     AND REFERENCED_COLUMN_NAME = 'coloumnName' 

SELECT * FROM information_schema.KEY_COLUMN_USAGE 
     WHERE REFERENCED_TABLE_NAME = 'student_table' 
     AND TABLE_SCHEMA='student_dataBase' 
     AND REFERENCED_COLUMN_NAME = 'studentId' 
+0

謝謝埃斯瓦爾。但是當我執行這個查詢時,它返回所有的表名。 (它也包含空表名)。如果數據存在,我需要表格名稱。 – jackrobert