Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Использование соотнесенных подзапросов для нахождения ошибок

Иногда полезно выполнять запросы, которые разработаны специально так, чтобы находить ошибки. Это всегда возможно при дефектной информации, которую можно ввести в вашу базу данных, и, если она введена, бывает трудно ее определить. Следующий запрос не должен производить никакого вывода. Он просматривает таблицу Порядков, чтобы видеть совпадают ли поля snum и cnum в каждой строке таблицы Заказчиков и выводит каждую строку, где этого совпадения нет. Другими словами, запрос выясняет, тот ли продавец кредитовал каждую продажу ( он воспринимает поле cnum, как первичный ключ таблицы Заказчиков, который не будет иметь никаких двойных значений в этой таблице ).

SELECT * FROM Orders main WHERE NOT snum = ( SELECT snum FROM Customers WHERE cnum = main.cnum );

При использовании механизма справочной целостности ( обсужденного в Главе 19 ), вы можете быть гарантированы от некоторых ошибок такого вида. Этот механизм не всегда доступен, хотя его Использование желательно во всех случаях, причем поиск ошибки запроса описанный выше, может быть еще полезнее.