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

Border-Radius IE8-kompatible Verarbeitungsmethode

Laut canisue (http://caniuse.com/#search=border-r...

Rückblick auf die besten Webdesign-Arbeiten 2012 [Teil 1]

Zum Beginn des neuen Jahres möchte ich meinen Fre...

Erläuterung zum Lastenausgleich und Reverseproxy von Nginx

Inhaltsverzeichnis Lastenausgleich Klassifizierun...

Upgrade der Docker-Version von MySQL 5.7 auf MySQL 8.0.13, Datenmigration

Inhaltsverzeichnis 1. Sichern Sie die alten MySQL...

Detaillierte Erklärung des Kopierobjekts von jQuery

<!DOCTYPE html> <html lang="de"...

Docker realisiert die Verbindung mit demselben IP-Netzwerksegment

Vor Kurzem habe ich das Problem gelöst, dass Dock...

Detaillierte Erläuterung der Nginx Reverse Proxy WebSocket-Konfiguration

Kürzlich habe ich bei der Arbeit an einem Projekt...

Vue - benutzerdefinierte gekapselte Schaltflächenkomponente

Der benutzerdefinierte Kapselungscode der Vue-But...

So verwenden Sie Verbindungen der Physik-Engine in CocosCreator

Inhaltsverzeichnis Mausgelenk Mausgelenk AbstandG...

Detaillierte Verwendung des Linux-Textsuchbefehls find

Der Befehl „Find“ wird hauptsächlich zum Suchen v...

Einführung in den B-Tree-Einfügeprozess

Im vorherigen Artikel https://www.jb51.net/articl...

Fallstricke und Lösungen für das Upgrade von MySQL 5.7.23 in CentOS 7

Vorwort Kürzlich bin ich beim Upgrade von MySQL 5...