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.
..So was erwarten Sie: Zeilen ohne Notizen zurückgegeben oder nicht? – Mihai
In nur wissen müssen, ob Notizen für einen Auftrag vorhanden sind, brauche ich nicht die tatsächlichen Notizen abrufen. – Jules
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