2015-04-15 103 views
0

我有兩個數據庫表和一些公共ID。 這是第一個表的結構:加入兩個SQL表

ID 1 - House 1 - New york - 0100 xxx xxx 
ID 2 - House 2 - London - 0100 yyx yyx 

這是第二個表的結構:

ID 101 - House 1 - Human 1 - 0100 yyy yyy 
ID 102 - House 1 - Human 2 - 0100 xyx yxy 
ID 103 - House 2 - Human 3 - 0100 xxy xxy 

我想找到一種方法將兩個表連接在一起,從而產生一些類似於下表:

House 1 - New York - 0100 xxx xxx - Human 1 - 0100 yyy yyy, Human 2 - 0100 xyx yxy 

UPDATE:

這是當前查詢:

SELECT a.SO as ID, a.NOB as house, a.TEL as tel, o.IME_PREZIME as person,  o.MOBILNI_TELEFON as tel2 
FROM OBJEKAT a 
join OBJEKAT_KONTAKTOSOBA o on o.SO=a.SO 
where a.MOBILNI_TELEFON is not null and o.MOBILNI_TELEFON is not null 
order by 2 

這是我所得到的(兩個或兩個以上行的每個人,我希望它下一個行多列)

16 01NI 018.522.885  Marija Radosavljević 064.844.1858 
17 02NI 018.243.568  Dragana Grujić 064.844.1833 
17 02NI 018.243.568  Adriana Cvetković 064.844.1867 
15 04SK 021.465.263  Nikolina Lulić 064.844.1860 
15 04SK 021.465.263  Dragana Borovčanin 064.844.1852 
12 05KA 024.877.077  Milena Lončar 064.844.1724 

正如你所看到的,在ID 17和15下,我有兩排,我希望它是一個像我在第一次解釋中給你展示的那樣。

第三編輯: 我要的是這樣的:

17 02NI 018.243.568  Dragana Grujić 064.844.1833 Adriana Cvetković 064.844.1867 

第四編輯: 這是不重複的,重複上面的建議是MySQL,和我有火鳥,WHIS沒有GROUP_CONCAT功能

+0

證明你的努力你試過了? –

+0

您可以通過GROUP_CONCAT組使用GROUP_CONCAT作爲房客列表,如果您想爲每位房客填寫一列,那麼這將變得更加困難 – Serpiton

+0

房子是共同的因素,即JOIN-ing列?如果人類3突然出現,你期望會發生什麼? – jarlh

回答

0

你的問題並不完全清楚。但根據我的理解,你需要的是table2上的一個外鍵引用table1上的主鍵,如table2.person_id(fk) references table1.id(primary)

那麼你的SQL查詢將是這樣的:

"SELECT * FROM table1,table2 ON table1.id = table2.person_id WHERE ..." 

希望這有助於

+0

不,我知道我怎麼能建立關係,但我不知道如何將屬於房子1的2個人放在房子1的同一排下面。現在,我爲那兩個人獲得了兩排,我想要它在1以下。 –

0

如果你有以下的列名:

CREATE TABLE Table1 
(
    Id INT, 
    HouseName NVARCHAR(60), 
    City NVARCHAR(60),   
    Col4 NVARCHAR(60) 
); 
CREATE TABLE Table2 
(
    Id INT, 
    HouseName NVARCHAR(60), 
    HumanName NVARCHAR(60),   
    Col4 NVARCHAR(60) 
); 
INSERT INTO Table1 VALUES 
(1, 'House 1', 'New york', '0100 xxx xxx'), 
(2, 'House 2', 'London', '0100 yyx yyx'); 

INSERT INTO Table2 VALUES 
(101, 'House 1', 'Human 1', '0100 yyy yyy'), 
(102, 'House 1', 'Human 2', '0100 xyx yxy'), 
(103, 'House 2', 'Human 3', '0100 xxy xxy'); 

SELECT t1.HouseName, t1.City, t1.Col4, t2.HumanName, t2.Col4, t3.HumanName, t3.Col4 
FROM Table1 t1 
JOIN Table2 t2 
    ON t1.HouseName = t2.HouseName 
JOIN Table2 t3 
    ON t2.Id < t3.Id 
WHERE t2.HouseName = t3.HouseName 

SQL FIDDLE

+0

您需要加入table2兩次,讓兩個人在同一排。 (左連接,如果少於2人...) – jarlh

+0

有了這個,就像上面的註釋一樣。我剛剛得到了關係,每個人又有兩排,我想要一排房子,並在那之下合併。所以,每個人都會有單獨的行下的列1 –

+0

更新的答案,嘗試類似的東西 –