2016-04-04 13 views
0

Ich habe eine Datenbank mit Bestellungen, deren Details in einer Reihe von Tabellen gespeichert sind; Bestellungen, Bestellartikel, Kunden, Produkte, Produktartikel, Notizen. Jeder Auftrag hat einen zugeordneten Eintrag in der Tabelle "Kunden und Produkte", mindestens einen Eintrag in der Tabelle "products_items". Es können Einträge für die Bestellung in der Notizentabelle vorhanden sein oder auch nicht.MYSQL - Effiziente Art zu finden, ob Einträge in der zugehörigen Tabelle vorhanden sind

Ich habe die folgende Abfrage, um die Auftragsdaten abzurufen, von dem ich ein Array erschaffe: -

SELECT * FROM orders o 
INNER JOIN order_items oi ON oi.order_id = o.order_id 
INNER JOIN customer c ON o.customer_id = c.customer_id 
INNER JOIN product p ON oi.product_id = p.product_id 
INNER JOIN product_item pi ON pi.product_item_id = oi.product_item_id 

Dies funktioniert, wie ich es brauchen eine eindeutige Zeile für jede Auftragsposition zu schaffen. Was ich nicht effizient tun kann, ist herauszufinden, ob eine Bestellung irgendwelche damit verbundenen Notizen hat oder nicht. Die Verwendung einer Unterabfrage scheint sehr ineffizient zu sein (es könnte mehr als 1000 Bestellungen geben) und die Verwendung eines JOIN führt dazu, dass Bestellartikel dupliziert werden, wenn mehr als eine Notiz mit der Bestellung verknüpft ist. Wie kann ich herausfinden, ob Notizen vorhanden sind?

Jede Hilfe wird sehr geschätzt.

+0

..So was erwarten Sie: Zeilen ohne Notizen zurückgegeben oder nicht? – Mihai

+0

In nur wissen müssen, ob Notizen für einen Auftrag vorhanden sind, brauche ich nicht die tatsächlichen Notizen abrufen. – Jules

+0

Möchten Sie die Aufträge ohne Notizen erhalten? Sie können nicht überprüfen, ob sie vorhanden sind oder nicht, ohne die Tabelle zu treffen – Mihai

Antwort

0

ich notes gehe davon ist in einem anderen Tisch, weil es 1 ist: N und dass die ID wird note_id genannt.

select * from 
(
SELECT distinct(o.order_id) FROM 
orders o, order_items oi, customer c, product p, product_items as pi, notes as n 
where o.order_id = oi.order_id 
and o.note_id = n.note_id 
and o.customer_id = c.customer_id 
and p.product_id = oi.product_id 
and p.product_id = oi.product_id 
) as q, 
order ord 
where q.order_id = ord.order_id 
Verwandte Themen