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

単一のクエリを使用して、複数のテーブルからプルします

    のように、自己参加でこれを達成できるはずです。
    SELECT DISTINCT e2.eventId
    FROM event_tags e1
    INNER JOIN event_tags e2 
        ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
    WHERE e1.eventId = {}
    

    2番目のクエリにLIMIT 3があることに気付きました 句。まず、ORDER BYがないことに注意してください 句これは予測可能な結果を​​生成しません。これは、ウィンドウ関数ROW_NUMBER()に基づくソリューションです。 (MySQL 8で利用可能)、3つ以下のevent_idを生成します 一致するタグごとに:

    SELECT DISTINCT event_id FROM (
        SELECT e2.eventId, ROW_NUMBER() OVER(PARTITION BY e1.eventId ORDER BY e2.eventId) rn
        FROM event_tags e1
        INNER JOIN event_tags e2 
            ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
        WHERE e1.eventId = {}
    ) WHERE rn <= 3
    



    1. 複数のプリペアドステートメントの1つが失敗した場合は、停止して元に戻します

    2. サードパーティシステムへの自動ログインのためのユーザーデータの暗号化

    3. 2つのテーブルからクエリを実行するときに外部キーを使用する方法

    4. テーブル[テーブル名]はロックされていません