sql >> Databasteknik >  >> RDS >> Mysql

Hur får jag den här SQL-frågan att mata ut två rader istället för två fält?

Jag kallar detta MySQL-hackning...

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

För att gå med i tabellen för att få alla andra kolumner:

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. Hur man får den n:e strängen i ett generiskt ord eller en mening med en mellanslagsavgränsare

  2. SQL Server Update Databas Statistics

  3. Ställ in alternativ 9 i SQL Server lagrad procedur med WinHttp.WinHttpRequest.5.1 för TLS 1.2

  4. SSIS 2008 - Hämta aktuellt datum i variabler