2016-03-24 137 views
0

有兩個表(配置文件和位置)具有共同的ID字段。每個表都駐留在同一臺服務器上的單獨數據庫中。我需要顯示每個表中的列。配置文件表中有50條記錄需要與位置表中的50條匹配記錄一起顯示。這裏是我的查詢:SQL加入以顯示來自兩個表的數據

SELECT a.id, a.city, b.state FROM profile a JOIN Location b on a.id=b.id 

當我運行上述查詢超過50條記錄返回。當我從查詢中刪除b.state時,它返回50條記錄。當我將b.state添加到查詢中時有些不對。基於兩者之間的公共ID,需要返回的50個州應該是與Profile表中每個城市相關的州。

簡介表數據:

列表項

簡介表數據: ID |城市 1 | Chicag 2 |邁阿密 3 |底特律

狀態表數據: ID |國|人口 1 | Illinois | 10MM 2 |佛羅里達| 20MM 3 |密歇根州| 5MM 4 |弗吉尼亞州| 7MM 5 | Louisi ana | 3MM

我想顯示配置文件表中的所有內容,其中狀態表中的內容與顯示狀態和人口列的ID相匹配。

+2

請[編者按它]包括來自兩個表格的樣本數據以及您希望從該樣本獲得的結果。 –

+0

@ sa-meeh在下面的「答案」中,我將根據您在問題中提供的數據提供結果。但顯然你正在尋找不同的結果。你能幫我們理解你的期望嗎? – Ralph

+0

嗨@Ralph。我想顯示兩個表中的字段的組合。例如,身份證,城市和州。如果兩個表上的ID匹配,則應顯示基於匹配ID的城市及其相關狀態匹配。我的查詢返回許多結果。我在配置文件表中只有50條記錄。查詢應只返回ID與State表中的ID匹配的50條記錄。 –

回答

0

這不是一個答案,但僅僅是一個更容易使用的格式樣本數據:

declare @Profile table 
    (
    id int identity(1, 1) 
      primary key 
      not null, 
    City nvarchar(20) 
    ) 

insert into @Profile 
values (N'Chicago'), 
     (N'Miami'), 
     (N'Detroit') 

declare @State table 
    (
    id int identity(1, 1) 
      primary key 
      not null, 
    State nvarchar(20), 
    Population nvarchar(10) 
    ) 

insert into @State 
values (N'Illinois', N'10MM'), 
     (N'Florida', N'20MM'), 
     (N'Michigan', N'5MM'), 
     (N'Virginia', N'7MM'), 
     (N'Louisiana', N'3MM') 

select a.id, 
     a.City, 
     b.State 
from @Profile a 
join @State as b 
on  a.id = b.id 
0

你需要一個內連接來過濾掉非匹配(你的例子沒有詳細說明哪種類型加入到使用):

SELECT a.id, a.city, b.state 
FROM [profile] a 
INNER JOIN Location b on a.id=b.id 

也有可能是重複的,以及,這意味着你可以試試這個:

SELECT DISTINCT a.id, a.city, b.state 
FROM [profile] a 
INNER JOIN Location b on a.id=b.id