How do I list all (unique) ID's from the below table that have an F in INSTRUCTION for TYPE PA unless CA also has an F in INSTRUCTION
| ID | TYPE | INSTRUCTION |
|---|---|---|
| 12 | CA | 203 |
| 12 | LT | F |
| 12 | PA | 408 |
| 15 | CA | F |
| 15 | LT | F |
| 15 | PA | F |
| 24 | CA | 608 |
| 24 | LT | 309 |
| 24 | PA | 75 |
| 133 | CA | 468 |
| 133 | LT | F |
| 133 | PA | F |
I tried the following
WHERE table.TYPE)="PA") AND (table.INSTRUCTION)="F")
But this also includes records having INSTRUCTION F for TYPE CA (which I don't want in the results)
| ID |
|---|
| 15 |
| 133 |
The desired outcome is as follows:
| ID |
|---|
| 133 |
CodePudding user response:
Start with a query which selects 'PA' type and 'F' instruction rows. Then left join that to a subquery which selects 'CA' type and 'F' instruction rows. And, in the main query, limit the selected rows to those where the subquery id is Null.
SELECT y.ID
FROM
YourTable AS y
LEFT JOIN
(
SELECT y2.ID
FROM YourTable AS y2
WHERE
y2.TYPE='CA'
AND y2.INSTRUCTION='F'
) AS sub
ON y.ID = sub.ID
WHERE
y.TYPE='PA'
AND y.INSTRUCTION='F'
AND sub.ID Is Null;
