Ну а стандарт ANSI092 включає в себе досить симпатичний синтаксис. Натуральні приєднання це одне, а ЗАСТОСУВАННЯ - інше. ІМХО, додавання стовпця до таблиці не повинно порушувати код, а ПРИРОДНЕ ПРИЄДНАННЯ перерветься в найвиразніший спосіб. "Найкращий" спосіб зламати - це помилка компіляції. Наприклад, якщо ви десь виберіть *, додавання стовпця можене вдалося скласти. Наступним кращим способом невдачі буде помилка часу запуску. Це гірше, тому що ваші користувачі можуть це бачити, але це все одно дає вам гарне попередження про те, що ви щось зламали. Якщо ви використовуєте ANSI92 і пишете запити з NATURAL приєднується, він не порушиться під час компіляції і не порушиться під час виконання, запит просто раптом почне давати неправильні результати. Ці типи клопів підступні. Звіти йдуть не так, можливо, розкриття фінансових даних є невірним.
Для тих, хто не знайомий з НАТУРАЛЬНИМ Приєднанням. Вони об'єднують дві таблиці на кожне ім'я стовпця, яке існує в обох таблицях. Що дуже здорово, якщо у вас є клавіша з 4 стовпцями і вам не вистачає набору тексту. Проблема виникає, коли в Table1 є попередньо стовпчик з назвою DESCRIPTION, і ви додаєте новий стовпець у таблицю2 з назвою, о, я не знаю, щось нешкідливе, як, ммм, ОПИС, і тепер ви приєднуєтесь до двох таблиць на VARCHAR2 (1000) поле, яке є вільною формою.
Пропозиція USING може призвести до повної неоднозначності на додаток до описаної вище проблеми. В іншому повідомленні про те , хтось показав цей ANSI-92 SQL і попросив допомогти його прочитати.
SELECT c.*
FROM companies AS c
JOIN users AS u USING(companyid)
JOIN jobs AS j USING(userid)
JOIN useraccounts AS us USING(userid)
WHERE j.jobid = 123
Це абсолютно неоднозначно. Я розміщую стовпчик UserID як у компаніях, так і в таблицях користувачів, і скарги немає. Що робити, якщо стовпець UserID у компаніях - це ідентифікатор останньої особи, яка змінила цей рядок?
Я серйозно, чи можу хтось пояснити, чому така неоднозначність була потрібна? Чому він вбудований прямо в стандарт?
Я думаю, Білл правильно, що існує велика база розробників, які копіюють / вставляють туди шляхом кодування. Насправді я можу визнати, що я такий собі, коли мова йде про ANSI-92. Кожен приклад, який я коли-небудь бачив, показав, що в круглих дужках вкладаються кілька приєднань. Чесність, що робить вибір таблиць у sql у кращому випадку складним. Але тоді евангліст SQL92 пояснив, що насправді змусить наказувати приєднання. JESUS ... всі ті копії пастерів, які я бачив, зараз насправді змушують приєднатися до замовлення - це робота, яка в 95% часу краще залишити оптимізаторам, особливо копіювальній / пастерній.
Томалак зрозумів це правильно, коли сказав:
люди не переходять на новий синтаксис лише тому, що він є
Це має щось мені дати, і я не бачу перелом. А якщо є перелом, негативи - це занадто великий альбатрос, щоб його ігнорувати.