Mysql
 sql >> Baza danych >  >> RDS >> Mysql

złożona instrukcja sql do różnych wierszy

Wygląda na to, że chcesz zabronić dołączania , tj. najpierw musisz ustalić, które identyfikatory użytkowników mają IsFinal = 1 , a następnie użyj tego zestawu wyników do zwrócenia wszystkich identyfikatorów użytkowników nie na tej liście.

Istnieje wiele sposobów na zaimplementowanie zabezpieczenia przed sprzężeniem.

  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;
    

Może się zdarzyć, że będą one równie wydajne w Twojej bazie danych, ale nadal dobrym pomysłem może być przetestowanie każdego z nich, aby przynajmniej uniknąć uzyskania jednego, który działa gorzej niż inne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas instalacji MySQL-python z pip install w OSX, virtualenv

  2. Wystąpił błąd JNI, sprawdź instalację i spróbuj ponownie w Eclipse x86 Windows 8.1

  3. Nie udało się załadować klasy sterownika com.mysql.jdbc.Driver

  4. Dowiedz się, czy tabela ma DELETE na CASCADE

  5. Dlaczego ten błąd wystąpił podczas tworzenia EVENT z instrukcją złożoną?