Выбор строк, которые не соответствуют критериям этого объединения - PullRequest
1 голос
/ 17 сентября 2011

Ошибка при проверке таблицы индекса поиска (asIndex), созданной сценарием из 25 таблиц.

В таблицах asIndex и Evaluations есть несколько строк на адрес.

Таким образом, этот запрос был попыткой убедиться, что везде строка индекса имеет Evaluation = 'blue', что в оценках была хотя бы одна строка, где Evaluation установлена ​​в 'blue'. Работает, но выдает 40K строк.

SELECT 
    ev.`Street Name`, 
    ev.`Street Number`, 
    ev.Evaluation
FROM 
  `tblEvaluations` ev,
  `asIndex` asi
WHERE asi.`Evaluation` = 'blue'
AND asi.`StreetName` = ev.`Street Name`
AND asi.`StreetNumber` = ev.`Street Number`;

Что мне нужно сделать, это сделать запрос, в котором будет перечислен любой адрес, у которого в asIndex есть синяя оценка, но для которой в таблице оценок нет совпадающего адреса с синим значением оценки.

Как выбрать это отрицательное совпадение?

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Вы можете использовать левое соединение.

SELECT 
    asi.`Street Name`, 
    asi.`Street Number`, 
    asi.Evaluation
FROM 
  `asIndex` asi ledt join
  `tblEvaluations` ev on asi.`StreetName` = ev.`Street Name`
      AND asi.`StreetNumber` = ev.`Street Number`
WHERE asi.`Evaluation` = 'blue'
   AND ev.`Street Name` is Null;
1 голос
/ 17 сентября 2011

NOT EXISTS - самый чистый и стандартный SQL тоже

SELECT 
    ev.`Street Name`, 
    ev.`Street Number`, 
    ev.Evaluation
FROM 
  `tblEvaluations` ev
WHERE 
  NOT EXISTS (SELECT * FROM   `asIndex` asi
           WHERE
    asi.`Evaluation` = 'blue'
    AND asi.`StreetName` = ev.`Street Name`
    AND asi.`StreetNumber` = ev.`Street Number
    );

Редактировать: у Эвана была точка (удалили их ответ, который может быть тем, что вы хотите). Это зависит от того, как вы фильтруете синий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...