Beispiel für das Abrufen der neuesten Daten mithilfe einer MySQL-Mehrtabellenassoziations-Eins-zu-viele-Abfrage

Beispiel für das Abrufen der neuesten Daten mithilfe einer MySQL-Mehrtabellenassoziations-Eins-zu-viele-Abfrage

Dieser Artikel beschreibt anhand eines Beispiels, wie Sie über eine Eins-zu-viele-Abfrage mit mehreren Tabellen in MySQL die aktuellsten Daten abrufen. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

MySQL-Mehrtabellenassoziations-Eins-zu-viele-Abfrage zum Abrufen der neuesten Daten

Aufgetretene Probleme

Mehrere Tabellen werden mit Eins-zu-viele-Abfragen verknüpft, um die neuesten Daten zu erhalten, und die Daten werden wiederholt

Aus historischen Gründen ist das Design der Tabellenstruktur nicht sinnvoll. Das Produkt teilte mir mit, dass ich Kundeninformationsdaten, die Branche des Kunden und Daten zur Steuerart exportieren müsse. Diese beiden Felder befinden sich jedoch in der Bestelltabelle und die Kunden müssen sie bei jeder Bestellung ausfüllen. Es ist ersichtlich, dass zwischen Kundendaten und Bestelldaten eine Eins-zu-viele-Beziehung besteht. Daher stellt sich die Frage, welche Daten in der Bestellung ich als Grundlage nehmen soll. Nach Rücksprache wurde vereinbart, dass die neuesten Daten maßgebend sind.

SQL-Skript zur Datentestinitialisierung

DROP TABLE, WENN „Kunde“ EXISTIERT;
CREATE TABLE `Kunde` (
	`id` BIGINT NOT NULL COMMENT 'Kunden-ID',
	`real_name` VARCHAR(20) NOT NULL COMMENT 'Kundenname',
	`create_time` DATETIME NOT NULL COMMENT 'Erstellungszeit',
	PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=INNODB DEFAULT CHARSET = UTF8 COMMENT 'Kundeninformationstabelle';

-- DATEN FÜR TABELLE Kunde
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7717194510959685632', 'Nicht verwenden', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7718605481599623168', 'Nachname', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7720804666226278400', 'Benutzer', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7720882041353961472', 'Kundenname', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722233303626055680', 'Baby', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722233895811448832', 'Xiaobao', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722234507982700544', 'Kundenname', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722234927631204352', 'Kundenname', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722235550724423680', 'Anmelden', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722235921488314368', 'Xiao Ming', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722238233975881728', 'Benutzer', '23.01.2019 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722246644138409984', 'Xiaohong', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722318634321346560', 'Schlüssel', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722318674321346586', 'Schlüssel', '2019-01-23 16:23:05');
INSERT INTO `demo`.`customer` (`id`, `real_name`, `create_time`) VALUES ('7722318974421546780', 'Schlüssel', '2019-01-23 16:23:05');


Tabelle löschen, wenn `Bestellinfo` vorhanden ist;
CREATE TABLE `order_info` (
	`id` BIGINT NOT NULL COMMENT 'Bestell-ID',
	`Industrie` VARCHAR(255) DEFAULT NULL COMMENT 'Industrie',
 `nature_tax` VARCHAR(255) DEFAULT NULL COMMENT 'Steuernatur',
	`customer_id` VARCHAR(20) NOT NULL COMMENT 'Kunden-ID',
	`create_time` DATETIME NOT NULL COMMENT 'Erstellungszeit',
	PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=INNODB DEFAULT CHARSET = UTF8 COMMENT 'Bestellinformationstabelle';

-- DATEN FÜR TABELLE order_info
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700163609453207552', 'Gastronomie und Hotel', 'kleiner Maßstab', '7717194510959685632', '23.01.2019 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700163609453207553', 'Gastronomie und Hotel', 'kleiner Maßstab', '7717194510959685632', '23.01.2019 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700167995646615552', 'High-Tech', 'Allgemeiner Steuerzahler', '7718605481599623168', '23.01.2019 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700167995646615553', 'Handel', 'Allgemeiner Steuerzahler', '7718605481599623168', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700193633216569344', 'Handel', 'Allgemeiner Steuerzahler', '7720804666226278400', '2019-01-23 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700193633216569345', 'High-Tech', 'Allgemeiner Steuerzahler', '7720804666226278400', '23.01.2019 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700197875671179264', 'Kategorie Gastronomie und Hotellerie', 'allgemeiner Steuerzahler', '7720882041353961472', '23.01.2019 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7700197875671179266', 'Kategorie Gastronomie und Hotellerie', 'allgemeiner Steuerzahler', '7720882041353961472', '23.01.2019 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7703053372673171456', 'Hightech', 'Kleiner Maßstab', '7722233303626055680', '23.01.2019 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7703053372673171457', 'Hightech', 'Kleiner Maßstab', '7722233303626055680', '23.01.2019 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709742385262698496', 'Servicekategorie', 'Allgemeiner Steuerzahler', '7722233895811448832', '2019-01-23 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709742385262698498', 'Servicekategorie', 'Allgemeiner Steuerzahler', '7722233895811448832', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745055683780608', 'High-Tech', 'Kleiner Maßstab', '7722234507982700544', '2019-01-23 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745055683780609', 'Import und Export', 'Kleiner Maßstab', '7722234507982700544', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745249439653888', 'Kultur und Sport', 'Allgemeiner Steuerzahler', '7722234927631204352', '2019-01-24 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745249439653889', 'High-Tech', 'Allgemeiner Steuerzahler', '7722234927631204352', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745453266051072', 'High-Tech', 'Kleiner Maßstab', '7722235550724423680', '2019-01-24 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745453266051073', 'Kultur und Sport', 'Kleiner Maßstab', '7722235550724423680', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745539848413184', 'Technologie', 'Allgemeiner Steuerzahler', '7722235921488314368', '2019-01-24 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745539848413185', 'High-Tech', 'Allgemeiner Steuerzahler', '7722235921488314368', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745652603887616', 'High-Tech', 'Allgemeiner Steuerzahler', '7722238233975881728', '2019-01-24 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745652603887617', 'Technologie', 'Allgemeiner Steuerzahler', '7722238233975881728', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745755528568832', 'Import und Export', 'Allgemeiner Steuerzahler', '7722246644138409984', '2019-01-24 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745755528568833', 'Bildungsberatung', 'Kleiner Maßstab', '7722246644138409984', '23.01.2019 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745892539047936', 'Bildungsberatung', 'Allgemeiner Steuerzahler', '7722318634321346560', '24.01.2019 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709745892539047937', 'Import und Export', 'Allgemeiner Steuerzahler', '7722318634321346560', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709746000127139840', 'Produktion', 'Kleiner Maßstab', '7722318674321346586', '2019-01-24 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709746000127139841', 'Landwirtschaft', 'Allgemeiner Steuerzahler', '7722318674321346586', '2019-01-23 17:09:53');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709746447445467136', 'Landwirtschaft', 'Allgemeiner Steuerzahler', '7722318974421546780', '24.01.2019 16:54:25');
INSERT INTO `demo`.`order_info` (`id`, `industry`, `nature_tax`, `customer_id`, `create_time`) VALUES ('7709746447445467137', 'Produktion', 'Kleiner Maßstab', '7722318974421546780', '23.01.2019 17:09:53');

  • SQL-Anweisungen nach Bedarf geschrieben:
UPDATE Bestellinfo SET Erstellungszeitpunkt = JETZT();
  • Versuchen Sie, das Problem zu lösen
WÄHLEN
	cr.id,
	cr.realer_name,
	oi.industrie,
	oi.nature_tax
AUS
	Kunde AS cr
LINKS VERBINDEN (
	SELECT a.industry, a.nature_tax, a.customer_id, a.create_time FROM order_info AS a
	LINKS VERBINDEN (
		SELECT MAX(Erstellungszeit) AS Erstellungszeit, Kunden-ID FROM Bestellinfo GROUP BY Kunden-ID
	) AS b ON a.customer_id = b.customer_id
WO a.Erstellungszeit = b.Erstellungszeit
) AS oi ON oi.customer_id = cr.id
GRUPPE NACH cr.id;

Datenduplizierung? Kein Problem. Können wir nicht einfach ein GROUP BY hinzufügen, um das Problem zu lösen? Wie kann ich so schlau sein, hahaha! ! ! Aber als ich mit der Ausführung des SQL fertig war, war ich wieder verwirrt. Die Branche und die Steuerart in den Abfrageergebnissen waren immer noch nicht die neuesten. Es schien, als hätte ich zu viel nachgedacht, also sollte ich das Problem ehrlich lösen. . .

  • Suchen nach doppelten Daten
WÄHLEN
	cr.id,
	cr.realer_name,
	oi.industrie,
	oi.nature_tax
AUS
	Kunde AS cr
LINKS VERBINDEN (
	SELECT a.industry, a.nature_tax, a.customer_id, a.create_time FROM order_info AS a
	LINKS VERBINDEN (
		SELECT MAX(Erstellungszeit) AS Erstellungszeit, Kunden-ID FROM Bestellinfo GROUP BY Kunden-ID
	) AS b ON a.customer_id = b.customer_id
WO a.Erstellungszeit = b.Erstellungszeit
) AS oi ON oi.customer_id = cr.id
GRUPPE NACH cr.id MIT ANZAHL(cr.id) >= 2;
  • Die Ausführungsergebnisse sind wie folgt:
WÄHLEN
	cr.id,
	cr.realer_name,
	oi.industrie,
	oi.nature_tax
AUS
	Kunde AS cr
LINKS VERBINDEN (
	SELECT a.industry, a.nature_tax, a.customer_id, a.create_time FROM order_info AS a
	LINKS VERBINDEN (
		SELECT MAX(id) AS id, Kunden-ID FROM Bestellinfo GROUP BY Kunden-ID
	) AS b ON a.customer_id = b.customer_id
WO a.id = b.id
) ALS oi EIN oi.customer_id = cr.id;

Hey, endlich gelöst. . .

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • MySQL implementiert Multi-Table-Assoziationsstatistiken (Unterabfragestatistiken) Beispiel
  • Eine kurze Diskussion über die Implementierung von Multi-Table-unabhängigen Abfragen in MySQL
  • Detaillierte MySQL-Erklärung zur Multi-Table-Assoziationsabfrage

<<:  js realisiert bidirektionale Datenbindung (Accessor-Überwachung)

>>:  Aufbau einer Docker+K8S-Clusterumgebung und verteilte Anwendungsbereitstellung

Artikel empfehlen

64-Bit-CentOs7-Quellcodeinstallation MySQL-5.6.35 Prozessfreigabe

Installieren Sie zuerst die abhängigen Pakete, um...

Analyse des Prinzips der Zentrierung von Elementen mit CSS

Es ist eine sehr häufige Anforderung, die horizon...

Tutorial zum binären Suchbaumalgorithmus für JavaScript-Anfänger

Inhaltsverzeichnis Was ist ein binärer Suchbaum (...

Detaillierte Erklärung der Primärschlüssel und Transaktionen in MySQL

Inhaltsverzeichnis 1. Kommentare zu MySQL-Primärs...

Detaillierte Erklärung der dynamischen Angular-Komponenten

Inhaltsverzeichnis Anwendungsszenarien So erreich...

Ein kurzer Vortrag über die Variablenförderung in JavaScript

Inhaltsverzeichnis Vorwort 1. Welche Variablen we...

Schritte zum Anpassen des Symbols in Vue

ant-design-vue passt die Verwendung von Ali Iconf...

Zusammenfassung der Javascript-Datumstools

lass Utils = { /** * Ist es das Todesjahr? * @ret...

Linux-Fernsteuerungsprogramm für Windows-System (drei Methoden)

Manchmal müssen wir Programme auf dem Windows-Sys...

So handhaben Sie gleichzeitige Aktualisierungen von MySQL-Daten

Wird UPDATE gesperrt? Wird die SQL-Anweisung gesp...