2013-11-03 64 views
0
SELECT user_id as user_id, CONCAT(first_name,' ',last_name) as name 
FROM users u 
WHERE (first_name like '%r%' or last_name like '%r%') 

UNION 

SELECT provider_id as provider_id, provider_name as name 
FROM providers 
WHERE (provider_name like '%r%') 

連接多個表使用上面的查詢,我得到在一個單一的select語句

user_id name 
5  Richard 
6  Rowen 
12  Riley 
21  Rowen providers 

羅文提供商有PROVIDER_ID是21,但列名是USER_ID。我如何獲得provider_id的不同列名?

回答

0

可以一分爲二列,並提供假值,你不能得到實際值:既然你正在做一個工會

SELECT '' as provider_id, user_id as user_id, CONCAT(first_name,' ',last_name) as name 
FROM users u 
WHERE (first_name like '%r%' or last_name like '%r%') 

UNION 

SELECT provider_id as provider_id, '' as user_id, provider_name as name 
FROM providers 
WHERE (provider_name like '%r%') 
+0

哇!它工作>你救了我的生命!非常感謝 ! – user2950179

0

,第二個查詢是從第一繼承列名查詢。這會導致執行後數據不準確。如果我是你,我會做一個JOIN而不是一個UNION。這將保留第二個查詢的列名,並將以易於閱讀的方式顯示數據。對於提供程序的行,用戶信息將爲NULL,對於屬於用戶的行,提供程序信息將爲NULL。我可以給你的最好建議是儘量不要在一列中結合兩種不同類型的數據。 User_Id和Provider_Id不應位於同一列,因爲它們具有不同的含義。

嘗試:

SELECT u.user_id, CONCAT(u.first_name,' ',u.last_name) as user_name, 
     p.provider_id, p.provider_name 
FROM users u, providers p 
WHERE (u.first_name like '%r%' or u.last_name like '%r%') or 
     (p.provider_name like '%r%') 
相關問題