Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

câu lệnh sql phức tạp đến các hàng khác nhau

Có vẻ như bạn muốn chống tham gia , tức là trước tiên bạn cần thiết lập ID người dùng nào có IsFinal = 1 , sau đó sử dụng tập hợp kết quả đó để trả về tất cả các ID người dùng not trong danh sách đó.

Có nhiều cách khác nhau để triển khai chống tham gia.

  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;
    

Có thể xảy ra trường hợp chúng sẽ hoạt động hiệu quả như nhau trong cơ sở dữ liệu của bạn, nhưng vẫn có thể là ý kiến ​​hay khi kiểm tra từng cái để ít nhất tránh kết thúc với một cái hoạt động kém hơn những cái khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tìm thấy lớp [org.springframework.orm.hibernate5.LocalSessionFactoryBean] cho bean có tên 'hibernate5AnnotatedSessionFactory'

  2. Tự động mở rộng quy mô với Amazon Aurora Serverless

  3. Làm cách nào để hoàn tác một câu lệnh mysql mà tôi vừa thực thi?

  4. Làm cách nào để $ _POST một giá trị được gán động trong PHP?

  5. Nhập bảng lớn MySQL