2013-05-06 38 views
0

的共同字段中的值從不同的表中的數據我有5張桌子......,獲得此基礎上爲所有表

活動,用戶,管理員,個人,僱主

活動,管理,個人,僱主屬於用戶表所示

Activity   Admin     Individual    Employer 
+-----------+ +------------------+ +------------------+ +------------------+ 
id | user_id  id | user_id | name id | user_id | name  id | user_id | name 
+-----------+ +------------------+ +------------------+ +------------------+ 

現在,我射擊的Activity表的查詢,

如果user_id值在Admin表,然後我需要從Admin表, 獲取名稱。如果user_id值在Employer表,然後我需要從Employer表中獲取的名稱, 同樣的,如果user_id值在Individual表,然後我需要得到名稱來自Individual表,

+0

你已經嘗試INNER JOIN這樣做。 – Adrian 2013-05-06 10:33:34

+0

您正在發射的查詢在哪裏?顯示代碼。對於那些RDBM的,MySQL,MS SQL Server,Oracle,postgre? – Yaroslav 2013-05-06 10:34:08

+0

@ F1beta - 是啊,它已經內在聯接 – kumar 2013-05-06 10:36:10

回答

0

使用LEFT JOINCOALESCE。事情是這樣的:

SELECT 
    a.id, 
    COALESCE(d.name, i.name, e.name) AS userName 
FROM Activity  AS a 
LEFT JOIN admin  AS d ON a.user_id = d.user_id 
LEFT JOIN Individual AS i ON a.user_id = i.user_id 
LEFT JOIN Employer AS e ON a.user_id = e.user_id; 
2

嘗試這個概念:

SELECT 
    A.ID AS ID 
    A.User_id AS UserID 
    A.Name AS Name 
    'Admin' AS TableName 
FROM Admin A INNER JOIN Activity B 
ON A.User_Id=B.User_Id 

UNION ALL 

SELECT 
    A.ID AS ID 
    A.User_id AS UserID 
    A.Name AS Name 
    'Individual' AS TableName 
FROM Individual A INNER JOIN Activity B 
ON A.User_Id=B.User_Id 

UNION ALL 

SELECT 
    A.ID AS ID 
    A.User_id AS UserID 
    A.Name AS Name 
    'Employer' AS TableName 
FROM Employer A INNER JOIN Activity B 
ON A.User_Id=B.User_Id 
+0

嗨阿努我有一個相關的問題...可能這些查詢不適用於postgres sql? – 2013-05-07 08:20:49

+0

我認爲這將是工作,因爲SQL是標準語言,許多數據庫遵循SQL標準。 – Anvesh 2013-05-07 08:39:02