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

このSQLクエリで2つのフィールドではなく、2つの行を出力するにはどうすればよいですか?

    私はこれをMySQLハッキングと呼んでいます。

    select @a as one
    from
    (
    
        SELECT @a := a.id, @b := b.id
        FROM Rankable a
        INNER JOIN Rankable b on a.id < b.id
        WHERE 
          a.category_id = ? AND b.category_id = ?
          AND NOT EXISTS (
            SELECT *
            FROM Comparison c
            WHERE c.lower_id in (a.id, b.id))
          AND NOT EXISTS (
            SELECT *
            FROM Comparison c
            WHERE c.higher_id IN (a.id, b.id))
        ORDER BY a.id * rand()
        LIMIT 1
    ) SQ
    union all
    select @b
    

    テーブルに参加して他のすべての列を取得するには:

    select Rankable.*
    from
    (
        select 1 as Sort, @a as one
        from
        (
    
            SELECT @a := a.id, @b := b.id
            FROM Rankable a
            INNER JOIN Rankable b on a.id < b.id
            WHERE 
              a.category_id = ? AND b.category_id = ?
              AND NOT EXISTS (
                SELECT *
                FROM Comparison c
                WHERE c.lower_id in (a.id, b.id))
              AND NOT EXISTS (
                SELECT *
                FROM Comparison c
                WHERE c.higher_id IN (a.id, b.id))
            ORDER BY a.id * rand()
            LIMIT 1
        ) SQ
        union all
        select 2, @b
    ) X
    INNER JOIN Rankable ON Rankable.Id = X.one
    ORDER BY X.Sort
    


    1. 悪い習慣:SQLServerでのNULLの回避

    2. mysqlはhtmlの特殊文字をUTFに相当するものに置き換えます

    3. ユーザー登録時にサブドメインを自動作成すると、新しいWebサイトが作成されますか、それともWebサイトの外観が表示されますか?

    4. sys_refcursorの代替