Vorwort Bei baumstrukturierten Daten in der Datenbank, wie z. B. Abteilungstabellen, müssen wir manchmal alle untergeordneten Abteilungen einer Abteilung oder alle übergeordneten Abteilungen einer Abteilung kennen. Zu diesem Zeitpunkt müssen wir eine rekursive MySQL-Abfrage verwenden Ich migriere derzeit ein Projekt von Oracle nach MySQL. Dabei stieß ich auf einige Oracle-Funktionen, die MySQL nicht bietet. Daher musste ich die Funktionen anpassen oder einen Weg finden, die Funktionen für die Transformation zu ersetzen. Rekursive Oracle-Abfrage Wenn Oracle rekursive Abfragen implementiert, können Sie „start with ... connect by“ verwenden. Die grundlegende Syntax zum Herstellen einer Verbindung durch rekursive Abfrage lautet:
start with: gibt an, welcher Knoten der Stammknoten ist. Sie können ohne Einschränkung 1=1 schreiben. Um den Knoten mit der ID 123 als Stammknoten zu verwenden, schreiben Sie start with id =123 connect by: connect by ist erforderlich, start with kann in manchen Fällen weggelassen werden, oder start with 1=1 ohne Einschränkung Prior: Das Schlüsselwort prior kann vor oder nach dem Gleichheitszeichen stehen und hat unterschiedliche Bedeutungen. Prior id = pid bedeutet beispielsweise, dass pid der Stammknoten dieses Datensatzes ist. Weitere Einzelheiten finden Sie in einem Oracle-Blog, den ich zuvor geschrieben habe: https://www.jb51.net/article/156306.htm Oracle-Implementierung <select id="listUnitInfo" resultType="com.admin.system.unit.model.UnitModel" databaseId="oracle"> wähle einen eindeutigen u.unit_code, u.Einheitenname, u.unit_tel, u.para_einheitencode von lzcity_approve_unit_info u beginne mit 1 = 1 <if test="unitCode != null und unitCode !=''"> und u.unit_code = #{unitCode} </if> <if test="unitName!=null und unitName!=''"> und u.unit_name wie '%'|| #{unitName} ||'%' </if> Verbinden durch vorherigen u.unit_code = u.para_unit_code und u.unit_code <>u.para_unit_code </Auswählen> Rekursive MySQL-Abfrage Im Folgenden wird hauptsächlich die Implementierung von MySQL vorgestellt. MySQL bietet keine ähnlichen Funktionen und kann daher nur über benutzerdefinierte Funktionen implementiert werden. Im Internet gibt es viele solcher Materialien, aber ich weiß nicht, welches davon ursprünglich ist. Dieser Blog ist gut geschrieben: https://www.jb51.net/database/201209/152513.html. Im Folgenden verwende ich auch die vom Autor bereitgestellte Methode, um meine eigene zu implementieren. Vielen Dank an den Autor für das Teilen. Hier verwenden wir die vom Autor bereitgestellte benutzerdefinierte Funktion sowie die Find_in_set-Funktion <select id="listUnitInfo" resultType="com.admin.system.unit.model.UnitModel" databaseId="mysql"> wähle einen eindeutigen u.unit_code, u.Einheitenname, u.unit_tel, u.para_einheitencode von t_unit_info u <wo> <if test="unitCode != null und unitCode !=''"> und find_in_set(u.unit_code,getunitChildList(#{unitCode})) </if> <if test="unitName!=null und unitName!=''"> und u.unit_name wie concat('%', #{unitName} ,'%') </if> </wo> </Auswählen> Benutzerdefinierte Funktion „getUnitChildList“ TRENNUNGSZEICHEN $$ VERWENDEN Sie `gd_base`$$ DROP-FUNKTION, WENN EXISTIERT `getUnitChildList`$$ CREATE DEFINER=`root`@`%` FUNCTION `getUnitChildList`(rootId INT) GIBT VARCHAR(1000) CHARSET utf8 ZURÜCK BEGINNEN DECLARE sChildList VARCHAR(1000); DECLARE sChildTemp VARCHAR(1000); SET sChildTemp = CAST(rootId AS CHAR); Solange sChildTemp nicht NULL ist, WENN (sChildList NICHT NULL IST) DANN SET sChildList = CONCAT(sChildList,',',sChildTemp); ANDERS SET sChildList = CONCAT(sChildTemp); ENDE, WENN; Wählen Sie Group_Concat (Einheitencode) in sChildTemp aus LZCITY_APPROVE_UNIT_INFO, wobei FIND_IN_SET (Paraeinheitencode, sChildTemp)>0; ENDE WÄHREND; Gibt die Kinderliste zurück. ENDE$$ TRENNUNGSZEICHEN ; Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: CentOS 8-Installationsdiagramm (superdetailliertes Tutorial)
>>: Detaillierte Erklärung des JS-Speicherplatzes
I. Einleitung Lassen Sie mich zunächst die MySQL-...
Es handelt sich im Wesentlichen um ein allgemeine...
Inhaltsverzeichnis 1. Installieren Sie das psutil...
Vorwort Vor einiger Zeit ist bei mir ein MySQL-De...
Inhaltsverzeichnis Offizielle Einführung in Node....
Inhaltsverzeichnis 0. Was ist ein Modul 1.Modul l...
In diesem Artikel wird die Installations- und Kon...
Problembeschreibung: Ich habe einen Mac gekauft u...
B-Baum ist eine allgemeine Datenstruktur. Daneben...
Wenn Neulinge Div+CSS entwickeln, müssen sie die ...
Inhaltsverzeichnis Einführung 1. Was ist one-clic...
Inhaltsverzeichnis js aufrufende Methode Android ...
beschreiben Gibt das Zeitintervall zwischen zwei ...
Inhaltsverzeichnis Funktionseinführung Funktion E...
Wenn wir eine automatische Erkennung durchführen,...