SQL Server - отсутствие NATURAL JOIN / x JOIN y USING (поле) - PullRequest
9 голосов
/ 19 июля 2010

Я только что прочитал о ЕСТЕСТВЕННОМ СОЕДИНЕНИИ / ИСПОЛЬЗОВАНИИ - функциях SQL92, которые (к сожалению?) Отсутствуют в текущем репертуаре SQL Server.

Кто-нибудь пришел из СУБД, которая поддерживает их в SQL Server (или другая не поддерживающая СУБД) - они были настолько полезны, насколько они звучат, или банкой с червями (что тоже звучит возможно!)?

Ответы [ 5 ]

15 голосов
/ 19 июля 2010

Я никогда не использую NATURAL JOIN, потому что мне не нравится возможность того, что объединение может сделать что-то, чего я не намерен, просто потому, что в обеих таблицах существует какое-то имя столбца.

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

9 голосов
/ 19 июля 2010

Считаете ли вы СУБД, которая была действительно реляционной ?:

в уроке D [действительно реляционный язык], единственный оператор присоединения называется JOIN, и это означает «естественный присоединяйся ... другого не должно быть присоединиться ... Мало кто имел опыт использования правильного реляционный язык. Из тех, кто Я сильно подозреваю, что ни один из они когда-либо жаловались на некоторые воспринимается неудобство в спаривании столбцы по именам

Источник: " Важность имен столбцов " Хью Дарвена

2 голосов
/ 04 мая 2015

Это вопрос удобства. Не обязательно , но оно должно иметь свое место, например, в интерактивных запросах (во всяком случае, каждое нажатие клавиши приближает нас к RSI), или в некоторых простых случаях написанного от руки SQL даже в рабочем коде (да, я это написал. И даже видел JOIN USING в серьезном коде, написанном не только мной, но и другими мудрыми программистами. Но я отвлекся).

Я нашел этот вопрос, когда искал подтверждение, что в SS отсутствует эта функция, и получил его. Меня только смущает количество ненависти к этому синтаксису, которое я приписываю синдрому кислого винограда. Я чувствую удивление, когда меня читают с покровительственным тоном Сладости (читай: синтаксический сахар) вредно для вашего здоровья. Вам все равно это не нужно.

Что приятно в синтаксисе JOIN USING, так это то, что он работает не только с именами столбцов , но и с псевдонимами столбцов , например:

-- foreign key "order".customerId references (customer.id)
SELECT c.*, c.id as customerId, o.* from customer c 
join "order" o using (customerId);

Я не согласен с "Присоединиться лучше, если только (...)" . Или аргумент, что вам могут понадобиться более сложные условия. С другой точки зрения, зачем использовать JOIN ON? Почему бы не быть чистым и перенести все условия в предложение WHERE?

SELECT t1.*, t2.* from t1, t2 where t2.t1_id = t1.id;

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

Так что вам не следует слишком сильно упускать этот конкретный синтаксис, но не за что радоваться тому, что его нет ( "Фу, это было близко. Так хорошо, что не было ПРИСОЕДИНЯТЬСЯ К ИСПОЛЬЗОВАНИЮ. Меня очень пощадили боли ").

Итак, хотя я лично использую JOIN ON 99% времени, я не чувствую никакого Schadenfreude, когда нет JOIN USING или NATURAL JOIN.

1 голос
/ 19 июля 2010

Я не вижу значения синтаксиса USING или NATURAL - как вы уже видели, только ON последовательно применяется, поэтому лучше с точки зрения переносимости.

Быть явным также лучше для обслуживания, кроме того, что альтернативы могут быть слишком ограничены, чтобы иметь дело с ситуациями.Я также предпочел бы, чтобы моя кодовая база была последовательной.

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