Umwandeln einer MSSQL-CTE-Abfrage in MySQL
Common Table Expressions (CTEs) sind ein leistungsstarkes Tool für rekursive Abfragen in Microsoft SQL Server. Allerdings unterstützt MySQL keine CTEs, was eine Herausforderung bei der Konvertierung von CTE-basierten Abfragen in MySQL darstellt.
Im bereitgestellten Beispiel wird eine CTE-Abfrage verwendet, um einen Kategoriebaum von unten nach oben zu erstellen, beginnend mit einem angegebenen Kategorie-ID. Um diese Funktionalität in MySQL zu replizieren, muss eine rekursive gespeicherte Prozedur implementiert werden.
Erstellen einer rekursiven gespeicherten Prozedur
Die folgende gespeicherte MySQL-Prozedur simuliert das Verhalten des MSSQL-CTE :
CREATE PROCEDURE get_category_tree(IN start_category_id INT) BEGIN DECLARE done INT DEFAULT 0; DECLARE id INT; DECLARE pid INT; DECLARE name VARCHAR(255); # Initialize the cursor DECLARE cursor_categories CURSOR FOR SELECT id, parentid, name FROM category WHERE id = start_category_id; # Open the cursor OPEN cursor_categories; # Fetch the first row FETCH cursor_categories INTO id, pid, name; # While there are more rows WHILE done = 0 DO # Print the current row SELECT id, pid, name; # If the parent ID is NULL, mark as done IF pid IS NULL THEN SET done = 1; ELSE # Move the cursor to the parent row SET start_category_id = pid; FETCH cursor_categories INTO id, pid, name; END IF; END WHILE; # Close the cursor CLOSE cursor_categories; END PROCEDURE;
Verwendung
Um die gespeicherte Prozedur zu verwenden, rufen Sie sie mit der gewünschten Startkategorie-ID als Argument auf:
CALL get_category_tree(197);
Dadurch wird der Kategoriebaum ab Kategorie 197 gedruckt und die Hierarchie nach oben durchlaufen, bis die Wurzel erreicht ist.
Das obige ist der detaillierte Inhalt vonWie migriere ich eine MSSQL-CTE-basierte Kategoriebaumabfrage nach MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!