sql >> データベース >  >> RDS >> Mysql

MySQLですべての子行を見つける方法は?

    Recursive MySQL Query withリレーショナルinnoDB

    昨日同じ回答を投稿しました

    更新:

    以下はfunctionです 上記のリンクに基づいていますが、DELETEに合わせて調整されています 要件

    CREATE PROCEDURE `delete_relations`(`_id` INT)
    BEGIN
    DECLARE  delete_row_ids varchar(200);
    DECLARE id, id2 varchar(200);
    DECLARE rows_affected int;
    
    SET delete_row_ids  = _id;
    SET id              = _id;
    SET id2             = id;
    
    WHILE id2 IS NOT NULL DO 
        SET id = NULL;
        SELECT GROUP_CONCAT( hierarchical_data.id ), CONCAT( GROUP_CONCAT( hierarchical_data.ID ),',',delete_row_ids) INTO id, delete_row_ids FROM hierarchical_data WHERE FIND_IN_SET( parentid , id2 ) GROUP BY parentid ;
        SET id2 = id;
    END WHILE;  
    
    DELETE FROM hierarchical_data where FIND_IN_SET(hierarchical_data.id, delete_row_ids);
    SELECT row_count() INTO rows_affected;
    
    if rows_affected > 0 THEN
    SELECT delete_row_ids as row_ids_deleted;
    ELSE
    SELECT 'NO_ROWS_DELETED';
    END IF;
    
    END//
    

    SQLFiddle

    使用

    CALL delete_relations(1)
    

    id = 1 hondaのすべてのエントリとその関係を削除するには

    お役に立てば幸いです



    1. SQL Server:テーブルメタデータの抽出(説明、フィールド、およびそれらのデータ型)

    2. Oracleのifステートメントのクエリを更新します

    3. SQLServerで「最終変更」列を作成する

    4. SQLテーブルからのブートストラップドロップダウンへのアイテムの挿入