2016-05-25 18 views
4

Wenn zwei Tabellen verbinden, bin ich mir nicht sicher, wie Sie die folgenden Tabellen in die genaue ich wollte verbinden.sql Join zwei Tabellen, eine Zusammenfassung der andere ist Detail

Tabelle A:

 
-------------------------------------- 
| id | name | buy time | total | 
-------------------------------------- 
| 1 | A | 3  | 30 | 
-------------------------------------- 
| 2 | B | 1  | 10 | 
-------------------------------------- 

Tabelle B:

 
------------------------------- 
| id | orderid | price | 
------------------------------- 
| 1 |  1 | 10 | 
------------------------------- 
| 1 |  2 | 10 | 
------------------------------- 
| 1 |  3 | 10 | 
------------------------------- 
| 2 |  4 | 10 | 
------------------------------- 

Tabelle C Join

 
--------------------------------------------------------- 
| id | name | buy time | total | orderid | price | 
--------------------------------------------------------- 
| 1 | A |  3  | 30 |   |  | 
--------------------------------------------------------- 
| 1 |  |   |  | 1  | 10 | 
--------------------------------------------------------- 
| 1 |  |   |  | 2  | 10 | 
--------------------------------------------------------- 
| 1 |  |   |  | 3  | 10 | 
--------------------------------------------------------- 
| 2 | B |  1  | 10 |   |  | 
--------------------------------------------------------- 
| 2 |  |   |  | 4  | 10 | 
--------------------------------------------------------- 

wenn ich A.id „Left OUT JOIN auf verwenden = B.id " der leere Bereich wird mit dem doppelten Wert gefüllt, der dazu führt, dass die Summe des Gesamteinkommens nicht korrekt ist

Ein anderer Weg ist "Wählen Sie 0 als Name von B", um das Leerzeichen mit 0 zu füllen, was zu einem Desaster führen wird, wenn die Anzahl der Spalten zu groß ist.

Daher würde ich gerne um Hilfe bitten, gibt es einen besseren Weg, um mein Ziel zu erreichen?

Antwort

3

Was Sie wirklich wollen, ist ein UNION von beiden Tabellen:

SELECT id, name, `buy time`, total, null AS orderid, null AS price 
FROM A 

UNION 

SELECT id, null, null, null, orderid, price 
FROM B 
ORDER BY id, name DESC, orderid 

Demo here

1

Sieht aus wie Sie benötigen ein UNION ALL:

SELECT `id`,`name`,`buy time`,`total`,null,null 
FROM TableA 
UNION ALL 
SELECT id,null,null,null,orderid,price 
FROM TableB 
ORDER BY `id`,`name` ,orderid 

Keine Notwendigkeit, machen dies zu unnötigen kommen, da Du verbindest dich auf keinen Fall mit ihnen.

0

sein Aussehen wie Sie benötigen UNION

select id, name, `buy time`, total, null AS orderid, null AS price 
from A 
UNION 
select id, null, null, null, orderid, price 
from B 
order by id, name DESC 
0

wählen Sie ID, Name, buytime, total, orderid, Preis verwenden, um von (

SELECT [id] 
, null as [orderid] 
    ,null as [price], 
    [name] 
    ,[buytime] 
    ,[total] 
    FROM A 
    UNION 

SELECT [id] 
    ,[orderid] 
    ,[price], 
    null as[name] 
    , null as[buytime] 
    ,null as [total] 
FROM B 

) als aa