How do i write Below query not using Not IN. Because of the perfomence reasons IN, Not in are not desirable.
select d.cert_serial_number as str from mdm_device d where d.client_id in (:CLIENT_IDS) and d.cert_serial_number not in (Select cert_serial_number from mdm_device where client_id not in (:CLIENT_IDS))
Table columns of interest:
| cert_serial_number | client_id |
+--------------------+------------+
| 102 | 1073741835 |
| 102 | 1073741836 |
| 102 | 1073741837 |
| 102 | 1073741838 |
| 102 | 1073741839 |
| 103 | 1073741840 |
| 103 | 1073741831 |
+--------------------+------------+------------+
If the cliend ids input are 1073741835,1073741836 output should be empty.
If the cliend ids input are 1073741835,1073741836,1073741837,1073741838,1073741839 output should be 102.
EDIT: I ended up using below query: SELECT d.cert_serial_number AS str FROM mdm_device d where d.client_id in (:CLIENT_IDS) AND NOT EXISTS (SELECT 1 FROM mdm_device e WHERE d.cert_serial_number = e.cert_serial_number AND d.client_id != e.client_id)