Sie können dies tun, ohne Unterabfragen (gut, vorausgesetzt, Sie sind eine items
Tabelle haben):
select i1.item_id, i2.item_id, count(*)
from items i1 join
items i2
on i1.item_id < i2.item_id join
orders o1
on o1.item_id = i1.item_id join
orders o2
on o2.item_id = i2.item_id and
o2.order_id = o1.order_id
group by i1.item_id, i2.item_id
having count(*) > 1;
Die Verbindung zwischen i1
und i2
erzeugt eine Liste aller Paare von Elementen, mit dem ersten Element kleiner als die Sekunde (verhindert Duplikate).
Die Verknüpfung zu o1
bringt die Auftrags-ID für den ersten Artikel.
Die Verbindung zu o2
bringt die Auftrags-ID für den zweiten Artikel - und stellt sicher, dass die Auftrags-ID die gleiche wie für den ersten Artikel ist.
Die group by
zählt die Anzahl der Bestellungen, die beide Artikel haben.
Und die having
Klausel stellt sicher, dass es mindestens zwei gibt.
Was ist die Logik dahinter? – Jens
Was genau möchten Sie tun? – Soheyl
Sie müssen viel besser erklären, was Sie tun möchten, wenn Sie möchten, dass jemand Ihren Code für Sie schreibt – RiggsFolly