SQL: выбор идентификаторов, которые не имеют строк с определенным значением для столбца

Я хочу выбрать различные идентификаторы (которые связаны с несколькими строками), которые не делаютТ есть строки, где VAL = 'ток'.

Например, в такой таблице:

PK | ID | VAL 
-------------
 1 | 23 | deleted
 2 | 23 | deleted
 3 | 23 | deleted
 4 | 45 | current
 5 | 45 | deleted
 6 | 45 | deleted
...|................

Я хотел бы, чтобы он возвратил ID 23, потому что у него нет строк, где VAL = 'ток', Обратите внимание, что в этой таблице первичные ключи (PK) являются уникальными, а идентификаторы - нет (следовательно, необходимо использовать DISTINCT или GROUP BY).

Вот что у меня есть в PHP:

$conn = someConnect("");

// returns ids associated with the number of rows they have where VAL != 'current'
$sql = "SELECT id, count(*) FROM table WHERE val != 'current' GROUP BY id"

$stid = oci_parse($conn, $sql);
oci_execute($stid);

oci_fetch_all($stid, $arr, OCI_FETCHSTATEMENT_BY_ROW);

foreach ($arr as $elm) {
   $id = key($elm);
   $non_current_count = $elm[$id];

   // counts the number of rows associated with the id, which includes VAL = 'current' rows
   $sql2 = "SELECT count(*) FROM table WHERE id = $id";

   $stid2 = oci_parse($conn, $sql2);
   oci_execute($stid2);
   $total_count = oci_fetch_array...
   if ($total_count != $non_current_count) {
      $output[] = $id;
   } 
   ...
}

oci_close($conn);

Тот'суть всего этого. Как видите, для выполнения этой задачи требуются два оператора SQL. Есть ли более короткий способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос