Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mendapatkan kueri SQL ini untuk menghasilkan dua baris, bukan dua bidang?

Saya menyebutnya peretasan 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

Untuk bergabung ke tabel untuk mendapatkan semua kolom lainnya:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan baris maksimum per grup dari tabel terkait

  2. aplikasi web spring-boot kehilangan kemampuan untuk terhubung ke MySQL / RDS setelah beberapa saat

  3. MySQL mengembalikan nilai maksimal atau nol jika satu kolom tidak memiliki nilai

  4. Pengecualian basis data - Kesalahan umum:1021 Disk penuh

  5. Performa kueri di dua database mysql di server yang sama?