2016-12-12 3 views
1

Ich habe zwei Tabellen:Welche Art von Join in MySQL sollte ich verwenden, um dies zu erreichen?

Table A 

id  name 
---  ----- 
1  Foo 
2  Bar 
3  Fred 
4  Joe 


Table B 
id  tablea_id result date 
---  ----  ---- --- 
1  1   A  02/04/2015 
2  2   A  02/04/2015 
3  1   B  03/04/2015 
4  1   C  04/04/2015 

Wie würde ich in der Lage sein, eine Ergebnismenge zu erreichen, der so aussieht? Welche Joins würde ich brauchen, um in Tabelle A zu "radeln"?

date  tablea_id result 
---   ---   ---- 
02/04/2015 1   A 
02/04/2015 2   A 
02/04/2015 3   NULL 
02/04/2015 4   NULL 
03/04/2015 1   B 
03/04/2015 2   NULL 
03/04/2015 3   NULL 
03/04/2015 4   NULL 
04/04/2015 1   C 
04/04/2015 2   NULL 
04/04/2015 3   NULL 
04/04/2015 4   NULL 
+0

Ich nehme an die dritte Reihe in den gewünschten Ergebnissen 2015.02.04 sein sollte. –

+0

ja, sorry krank bearbeiten – Jenski

Antwort

2

Es sieht aus wie Sie wollen ein cross join alle Zeilen zu erzeugen, und ein left join, um vorhandene Werte einzufügen:

select d.date, a.tablea_id, b.result 
from a cross join 
    (select distinct date from b) d left join 
    b 
    on b.tablea_id = a.tablea_id and b.date = d.date 
order by d.date, a.tablea_id; 
+0

Vielen Dank! – Jenski

+1

Sie haben mir gerade Stunden gespart – Jenski

0

Was würde Joins Ich brauche

Ein OUTER JOIN und höchstwahrscheinlich (pro geposteten erwartete Ergebnis) ein LEFT OUTER JOIN

+0

Wie würde ich sie verwenden? – Jenski

+0

@Jenski, lesen Dokumentation MySQL auf JOINS – Rahul

+0

SELECT * VON TableA LEFT OUTER JOIN TableB auf TableA.id = TableB.id Ist nicht das gewünschte Ergebnis erzeugen – Jenski

0
select ab.id,ab.date,b.result 
from 
(select a.id,b.date 
from(select distinct id 
from table_a)a, 
(select distinct date 
from table_b)b)ab 
left outer join 
table_b b 
on ab.id=b.id 
and ab.date=b.date 
0

Überprüfen Sie diese einfache Abfrage mit der vollen äußeren Verbindung. Live Demo

  select distinct a.date,a.id as tablea_id ,result from B b 
      full outer join 
      (
      select a.id,b.date from B b,A a 
      )A on a.id=b.tablea_id and a.date=b.date 

Result

+0

@Jenski funktioniert es für Sie? –

Verwandte Themen