Сопоставление обычного SQL с API базы данных Drupal - с использованием "существует"?


У меня есть следующий SQL, который я пытаюсь перевести с помощью API базы данных Drupal:

select nid,biblio_type from biblio where not exists
    (select * from biblio_types where biblio_type = tid);

Каким будет перевод? В настоящее время у меня есть это, которое не работает:

$sub_query = db_select('biblio_types','bt');
$sub_query->fields('bt',array('tid'))
         ->condition('biblio_type','tid','=');
$query = db_select('biblio','b');
$query->fields('b',array('biblio_type'))
      ->notExists($sub_query);
$result = $query->execute();

ПРАВКА #1: Изменено exists на notExists.

РЕДАКТИРОВАТЬ #2:

После изменения exists на notExists и замены оператора условия в подзапросе на where в соответствии с инструкциями Клайва, это SQL, который помещается в $result->queryString:

SELECT b.biblio_type AS biblio_type
FROM 
biblio b
WHERE  ( NOT EXISTS  (SELECT bt.tid AS tid
FROM 
biblio_types bt
WHERE  (b.biblio_type = bt.tid) ))

...именно этого я и ожидаю. Если я помещу это утверждение дословно в браузер запросов MySQL, я получу точные результаты, которые я хочу. Он возвращает ровно 9 строк данных. Идеально!

 3
Author: kiamlaluno, 2012-12-06

1 answers

Я думаю, вам нужно будет использовать where() для условия в подзапросе, PDO, скорее всего, процитирует "tid" и все испортит.

$sub_query->where('bt.biblio_type = b.tid');

Вы можете привести SelectQuery к строке, чтобы в любое время просмотреть ее эквивалент SQL, это очень помогает при отладке более сложных запросов.

print (string) $query;
 1
Author: Clive, 2012-12-06 19:50:03