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

pernyataan sql kompleks ke baris yang berbeda

Sepertinya Anda menginginkan anti-gabung , yaitu Anda harus terlebih dahulu menetapkan ID pengguna mana yang memiliki IsFinal = 1 , lalu gunakan kumpulan hasil itu untuk mengembalikan semua ID pengguna bukan dalam daftar itu.

Ada berbagai cara untuk menerapkan anti-gabung.

  1. NOT IN :

    SELECT *
    FROM atable
    WHERE UserID NOT IN (
      SELECT UserID
      FROM atable
      WHERE IsFinal = 1
    );
    
  2. NOT EXISTS :

    SELECT *
    FROM atable t1
    WHERE NOT EXISTS (
      SELECT *
      FROM atable t2
      WHERE t1.UserID = t2.UserID
        AND t2.IsFinal = 1
    );
    
  3. LEFT JOIN + WHERE IS NULL :

    a)

    SELECT *
    FROM atable t1
      LEFT JOIN (
        SELECT *
        FROM atable
        WHERE IsFinal = 1
      ) t2 ON t1.UserID = t2.UserID
    WHERE t2.UserID IS NULL;
    

    b)

    SELECT *
    FROM atable t1
      LEFT JOIN atable t2
        ON t1.UserID = t2.UserID AND t2.IsFinal = 1
    WHERE t2.UserID IS NULL;
    

Mungkin saja mereka akan sama-sama efisien dalam database Anda, tetapi mungkin ide yang baik untuk menguji masing-masing dari mereka setidaknya menghindari berakhir dengan satu yang berkinerja lebih buruk daripada yang lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyetel ulang kata sandi ROOT di MySQL 5.6

  2. akses pengguna baru mysql ditolak

  3. Membuat prosedur tersimpan:mengatur set karakter dan susunan

  4. Tidak dapat mengakses pengguna root MySql, bahkan setelah mengatur kata sandi melalui safemode di terminal linux

  5. VARCHAR vs TEXT di MySQL