Bestelltabelle: order
Bestellprodukttabelle: order_goods
Das heißt, order_goods speichert alle Artikel in jeder Bestellung in der Bestellung Produktinformationen;
Ich muss herausfinden, welche Produkte in den berechtigten Bestellungen enthalten sind.
Zum Beispiel: Ich möchte die Bestellungen mit der Bestellnummer gleich 20160804164336873986 in der Bestelltabelle finden und alle Felder in order und order_goods werden aufgelistet.
Bestelltabelle: order
Bestellprodukttabelle: order_goods
Das heißt, order_goods speichert alle Artikel in jeder Bestellung in der Bestellung Produktinformationen;
Ich muss herausfinden, welche Produkte in den berechtigten Bestellungen enthalten sind.
Zum Beispiel: Ich möchte die Bestellungen mit der Bestellnummer gleich 20160804164336873986 in der Bestelltabelle finden und alle Felder in order und order_goods werden aufgelistet.
order_goods hat mehrere Datensätze für eine order_id, daher bleibt order_goods mit der Bestellabfrage verbunden. Die Ausführungseffizienz der Verbindungsabfrageanweisung ist nicht hoch und muss optimiert werden
<code>SELECT * FROM order_goods og LEFT JOIN order o ON o.id=og.order_id</code>
<code>SELECT * FROM order a JOIN IN order_goods b ON a.id=b.order_id WHERE a.order_no='20160804164336873986' 大概是这样,不知道写错没有</code>
Eins-zu-viele-Assoziationsmodell
Nachdem ich einige der obigen Antworten gelesen habe, denke ich, dass sie die Anforderungen der Frage erfüllen können. Für mich, die unter einer Zwangsstörung leidet, muss ich sagen, dass Sie bei der Abfrage des Themas nicht das Symbol *
verwenden dürfen. Schreiben Sie so viele Felder aus, wie Sie möchten, und benennen Sie die Felder mit den gleichen Namen um.
Es wird empfohlen, keine Verknüpfung und Aufteilung in zwei Abfragen zu verwenden. Versuchen Sie außerdem, SELECT * nicht zu verwenden.
Ich habe auch eine gewisse Zwangsstörung. Wenn ich MySQL sehe, möchte ich fragen, ob das abzufragende Bedingungsfeld indiziert wurde.
Nachdem Sie die obige Antwort gesehen haben, fragen Sie zuerst die Daten in der Bestelltabelle ab und verwenden Sie dann eine Schleife, um die Daten in der Tabelle „order_goods“ abzufragen, die jeder Nummern-ID entsprechen. Auf diese Weise führen separate Abfragen nicht sofort zum Einfrieren (Natürlich werden Sie dies sehen, wenn die Datenmenge besonders groß ist. Wenn die Datenmenge klein ist, werde ich nichts über die Verwendung von Left Join sagen)
Mehrere Tabellenabfrage. Verwandte
<code>select * from order,order_goods where order.id = order_goods.order_id and order.id = '20160804164336873986'; select * form order inner join order_goods on order.id = order_goods.order_id where order.id = '20160804164336873986';</code>
Die beiden oben genannten Schreibweisen sind gleich und implementieren zwei Tabellenverbindungen.
Die Schreibweise mit drei Tabellenverbindungen ist ebenfalls ähnlich. Fragen Sie beispielsweise die Kurse und Noten des Studenten mit der ID 1 ab:
<code>SELECT * FROM `student`, `score`, `course` WHERE `student`.`id` = `score`.`student_id` AND `score`.`course_id` = `course`.`id` AND `student`.`id` = 1; SELECT * FROM `student` INNER JOIN `score` ON `score`.`student_id` = `student`.`id` INNER JOIN `course` ON `course`.`id` = `score`.`course_id` WHERE `student`.`id` = 1;</code>