2012-01-31 2 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

он работает, но трижды повторяется каждый бит. Группа помогла. БОЛЬШОЕ СПАСИБО! –

+0

Offcourse. Затем сделайте два LOJ один, а не один LOJ-ответ. – Konerak

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

спасибо, но он возвращает только одно значение: длина, год, страна –

0

Посмотрите group_cancat, мой синтаксис MySQL слишком ржавый, чтобы предоставить вам правильный пример. Застрял на земле T-SQL слишком долго. вот некоторые псевдо:

  1. Sub запрос SELECT GROUP_CONCAT(fied_data) FROM T1 GROUP BY bibid
  2. Внешний запрос SELECT [Whatever] FROM T2 JOIN T1 ON ...

В основном вы группа конкатенации * fied_data *, то запрос, что результирующий набор и соединение на bibid.

Смежные вопросы