2012-01-31 18 views
0

如我的示例中可以組合兩個表嗎?組合兩個表而不重複的MySQL

表中的一個:

bibid -- fieldid -- fied_data 
400 ----- 10 ------- 107 
400 ------ 5 -------- 1950 
400 ------ 3 -------- USA 
405 ------ 5 -------- 1997 
405 ----- 10 -------- 90 
405 ------ 3 -------- RUSSIA 

表二:

bibid -------- name 
400 --- Postman Always Rings Twice 
405 --- Postman is a very good person 

那結果將是:

bibid --------- name --------------------------length ----------year ---------- country 
400 -- Postman Always Rings Twice --------------107------------1950 ------------USA 
405 -- Postman is a very good person -----------90-------------1997 ------------RUSSIA 

回答

0

使用連接來獲取數據。

SELECT one.bibid, 
    two.name, 
    one_10.fied_data as length, 
    one_5.fied_data as year, 
    one_3.fied_data as country 
from table_two two 
LEFT OUTER JOIN table_one one 
ON one.bibid = two.bibid 
LEFT OUTER JOIN table_one one_3 
ON one.bibid = one_3.bibid 
AND one_3.fieldid = 3 
LEFT OUTER JOIN table_one one_5 
ON one.bibid = one_5.bibid 
AND one_5.fieldid = 5 
LEFT OUTER JOIN table_one one_10 
ON one.bibid = one_10.bibid 
AND one_10.fieldid = 10 

但它會更好,一定要規範你的數據...

BTW:你的意思是field_data代替fied_data?

+0

它的工作原理,但重複每個bibid三次。受到幫助。非常感謝! – 2012-01-31 20:32:00

+0

Offcourse。然後做兩個LOJ一個而不是一個LOJ兩個編輯的答案。 – Konerak 2012-02-01 06:09:17

0

請嘗試以下查詢:

select o.bibid, t.name name, 
(case when o.fieldid = 10 then o.fied_data end) length, 
(case when o.fieldid = 5 then o.fied_data end) year, 
(case when o.fieldid = 3 then o.fied_data end) countrty 
from table_one o, table_two t 
where o.bibid = t.bibid 
group by o.bibidid, t.name 
+0

謝謝,但它只返回一個含義:長度,年,國家 – 2012-01-31 20:29:39

0

看一看group_cancat,我的MySQL語法太生疏爲您提供一個適當的例子。在T-SQL的土地上呆了太久。這裏的一些僞:

  1. 子查詢SELECT GROUP_CONCAT(fied_data) FROM T1 GROUP BY bibid
  2. 外部查詢SELECT [Whatever] FROM T2 JOIN T1 ON ...

基本上你是組串聯的* fied_data *,然後查詢結果集的加入,並在bibid。

相關問題