5 присоединений? нужен только результат одного из них, а порядок важен? - PullRequest
0 голосов
/ 19 сентября 2009

Я делаю левое внешнее соединение с моей таблицей с 5 различными таблицами, и мне нужен результат только из одной из этих 5 таблиц.

Теперь я знаю, что могу использовать Coalesce, чтобы получить то, что я хочу. Тем не менее, мне было интересно, есть ли способ сказать SQL, чтобы не продолжать присоединение, как только один из оставленных соединений достигнет цели. Тем не менее, левые внешние объединения должны происходить в том же порядке, в котором я пишу свой запрос.

Ответы [ 3 ]

1 голос
/ 19 сентября 2009

Вы можете конвертировать LEFT JOIN запросов для использования EXISTS, что более эффективно.

А также это, вероятно, ваше намерение; Прекратить поиск / присоединение при выполнении условия.

0 голосов
/ 19 сентября 2009

В общем, если вам не нужны только одна строка и столбец, вы не можете сделать это. Возможно, я должен сказать, что вы , возможно, сможете найти тупой способ сделать это, но вы должны не .

SQL Server обычно не обращается к отдельным строкам за раз, поскольку это на самом деле очень неэффективно, скорее он попытается объединить свои операции ввода-вывода в таблицу, выполнив много операций поиска, или даже сканировать всю таблицу или целые разделы этого за один раз. В этом контексте часто просто слишком медленно останавливаться и решать, какую из следующих записей получить.

Поэтому я рекомендую просто использовать COALESCE и позволить SQL Server разобраться с этим.

0 голосов
/ 19 сентября 2009

Используйте UNION ALL, чтобы склеить 5 отдельных запросов на внешнее объединение и взять только первую строку.

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