drop table if exists tablea;
create table tablea(id int,catid varchar(6),acca int,accb int,price int);
drop table if exists tableb;
create table tableb(catid varchar(6),name varchar(7),customer varchar(6), dt date);
truncate tablea; truncate tableb;
insert into tablea values
(2,'Order5',111,131,40),(3,'Order1',131,511,40),(4,'Order2',131,511,40),(5,'Order3',111,131,30),(6,'Order3',133,131,10);
insert into tableb values
(1,'Order1','Apple','2016-11-02'),(2,'Order2','Apple','2016-11-11'),(3,'Order3','Apple','2016-11-11'),(4,'Order4','Google','2016-11-11');
Der erste Schritt in dieser Lösung ist, einen Dummy-Schlüssel (k) und entscheidet, zu erstellen, wenn die Zeile ein Elternteil oder ein Kind ist
MariaDB [sandbox]> select a.*,
-> case when a.acca = 131 then 1
-> else 2
-> end as ParentOrChild,
-> case when a.acca = 131 then concat(131 , year(b.dt), month(b.dt),day(b.dt),b.customer)
-> else concat(a.accb, year(b.dt), month(b.dt),day(b.dt),b.customer)
-> end as k
-> from tablea a
-> join tableb b on b.name = a.catid;
+------+--------+------+------+-------+---------------+------------------+
| id | catid | acca | accb | price | ParentOrChild | k |
+------+--------+------+------+-------+---------------+------------------+
| 3 | Order1 | 131 | 511 | 40 | 1 | 1312016112Apple |
| 4 | Order2 | 131 | 511 | 40 | 1 | 13120161111Apple |
| 5 | Order3 | 111 | 131 | 30 | 2 | 13120161111Apple |
| 6 | Order3 | 133 | 131 | 10 | 2 | 13120161111Apple |
+------+--------+------+------+-------+---------------+------------------+
4 rows in set (0.00 sec)
Die nächste Stufe funktioniert, wenn die gesamten Kinderpreise Streichhölzer aus die Mutter Preis
MariaDB [sandbox]> select s.parentorchild, s.k,
-> sum(case when s.parentorchild = 1 then s.price else 0 end) -
-> sum(case when s.parentorchild = 2 then s.price else 0 end) MatchedPrice
-> from
-> (
-> select a.*,
-> case when a.acca = 131 then 1
-> else 2
-> end as ParentOrChild,
-> case when a.acca = 131 then concat(131 , year(b.dt), month(b.dt),day(b.dt),b.customer)
-> else concat(a.accb, year(b.dt), month(b.dt),day(b.dt),b.customer)
-> end as k
-> from tablea a
-> join tableb b on b.name = a.catid
->) s
-> group by s.k
-> order by s.k,s.parentorchild;
+---------------+------------------+--------------+
| ParentOrChild | k | MatchedPrice |
+---------------+------------------+--------------+
| 1 | 13120161111Apple | 0 |
| 1 | 1312016112Apple | 40 |
+---------------+------------------+--------------+
2 rows in set (0.00 sec)
wir wissen nun, die der Dummy-Schlüssel (k), dass wir interessiert sind (MatchedPrice = 0) so, wenn wir wieder auf Dummy-Verbindungsschlüssel bekommen wir die Reihen wir in
012.351 interessiert sind
Beachten Sie, dass es für Leistungszwecke möglicherweise besser ist, wenn Sie Arbeitstabellen verwenden, anstatt zu versuchen, dies in einer einzelnen Abfrage zu tun.
Können Sie bitte zeigen, was Sie bis jetzt versucht haben und finden Sie den Link hilfreich http://www.w3schools.com/sql/sql_join_left.asp – Veerendra
Geben Sie Ihre Beispieldaten und Beispiel erwartetes Ergebnis. – Viki888
teilen Sie Ihre Abfrage und Beispieltabellendaten – AftabHafeez