Как сделать 3-х столовое Natural Join? - PullRequest
9 голосов
/ 28 февраля 2011

Это правильный способ написания трех естественных объединений? :

SELECT C.name, P.name 
FROM client C NATURAL JOIN order O NATURAL JOIN product P 
WHERE O.date > '15.02.2011'

Ответы [ 3 ]

17 голосов
/ 28 февраля 2011

Это действительно типичный синтаксис для естественных объединений. Однако не все базы данных поддерживают естественные объединения (например, я не верю, что SQLServer поддерживает это), и я не верю, что существует ANSI стандарт для естественного соединения.

Обратите внимание, что естественные объединения обычно считаются опасными и чего-то следует избегать - это потому, что они затеняют отношения соединения, от которых зависит запрос, и могут привести к запросам, значение которых изменяется, если модель данных измененный.

1 голос
/ 01 марта 2011

Чтобы проверить синтаксис, если выбранный вами продукт SQL не поддерживает его, используйте Mimer SQL-92 validator . Вы должны обнаружить, что order и date являются зарезервированными словами. Измените их на my_order и my_date соответственно, и вы обнаружите, что у вас действительный синтаксис Transitional SQL-92.

0 голосов
/ 01 марта 2011

использование этого синтаксиса считается опасным, как уже упоминалось. Рассмотрим следующий пример: T1 (идентификатор, имя, возраст) T2 (идентификатор, возраст, город)

SELECT T1.id, T1.name, T1.age, T2.age
FROM T1 NATURAL JOIN T2

Какой столбец следует использовать для объединения? идентификатор или возраст? Это не определено. Каждый продавец может реализовать свой способ решения таких проблем.

Вместо этого синтаксиса рассмотрите возможность использования традиционного синтаксиса соединения:

SELECT T1.....
FROM T1 INNER JOIN T2 on T1.id=T2.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...