1) [ВЛЕВО | ВПРАВО] ПОЛУ ПОСОЕДИНЯЙТЕСЬ и [ВЛЕВО | RIGHT] ANTI JOIN
Это позволило бы мне написать что-то вроде
-- return customers who have placed at least one order
SELECT c.*
FROM Customers c
LEFT SEMI JOIN o ON o.CustomerId = c.Id
-- return customers who have NOT placed any order
SELECT c.*
FROM Customers c
LEFT ANTI JOIN o ON o.CustomerId = c.Id
Это будет иметь точно такой же результат, как и
SELECT c.*
FROM Customers c
WHERE c.Id IN(SELECT CustomerId FROM Orders)
и
SELECT c.*
FROM Customers c
WHERE c.Id NOT IN(SELECT CustomerId FROM Orders)
соответственно. Однако синтаксис IN (или в значительной степени эквивалентный EXISTS) намного сложнее, чем предлагаемый мной синтаксис, особенно в более сложных случаях.
Конечно, на таблицу semi / anti-join нельзя ссылаться, поэтому это НЕЗАКОННО:
-- Error, can't reference semi joined table.
SELECT c.*, o.OrderNumber
FROM Customers c
LEFT SEMI JOIN o ON o.CustomerId = c.Id
2) Было бы неплохо иметь хорошее решение для
WHERE Column IN('a', 'b', 'c')
проблема, когда вы не знаете количество значений для поиска. Возможно, можно было бы разрешить
WHERE Column IN(ARRAY @array)
и вызывающий код привязывает @array к массиву.
Редактировать: я только что подумал еще об одном
3) Некоторая возможность расширения системы ограничений, которая позволяет кодировать ограничения между таблицами, которые отлично работают в параллельных средах, и которая позволяет мне вручную выполнять любую блокировку и проверку, чтобы гарантировать, что ограничение всегда выполняется. Триггеры могут быть использованы в настоящее время, но их очень трудно понять правильно, учитывая параллелизм.