Есть ли способ использовать несколько исходных таблиц в предложении FROM без использования JOIN на SQL сервере? - PullRequest
0 голосов
/ 13 июля 2020

Я могу реализовать один вложенный оператор SELECT в предложении FROM, как это, и он работает:

SELECT [table1].[ID] as [table_1_ID]
FROM
(SELECT [ID] FROM  [the_table_1] WHERE [address] like 'street5' ) as [table1]

В идеале я sh добавляю несколько похожих вложенных операторов SELECT внутри предложения FROM без использования соединения , чтобы получить что-то вроде этого (следующий код явно не работает)

 SELECT [nested_selects].[table1].[ID]  as [table_1_ID],
        [nested_selects].[table2].[ID]  as [table_2_ID]
    FROM (
    (SELECT [ID] FROM  [the_table_1] WHERE [address] like 'street5' ) as [table1],
    (SELECT [ID] FROM  [the_table_2] WHERE [address] like 'street5' ) as [table2]
    ) as [nested_selects]

(Из каждой исходной таблицы мне нужно только одно значение. Предложение WHERE делает это.)

Я знаю, как это сделать с помощью JOIN, но по какой-то причине я использую sh, чтобы сделать это без JOIN. Возможно ли такое в SQL Сервере?

1 Ответ

2 голосов
/ 13 июля 2020

Если вы можете гарантировать, что из подзапросов будет возвращено только одно значение, вы можете вложить выборки внутри select. Вам вообще не нужен from (я заменил ваш like на =):

select
   table_1_id = (SELECT [ID] FROM  [the_table_1] WHERE [address] = 'street5' ),
   table_2_id = (SELECT [ID] FROM  [the_table_2] WHERE [address] = 'street5' );

Технически не имеет для обеспечения соблюдения этой гарантии . Но если вам случится вернуть более одной строки для подзапроса в select, SQL с выдачей ошибки Subquery returned more than 1 value. Итак, либо наложите уникальное ограничение на address, либо добавьте что-нибудь в каждый подвыбор, гарантирующий возврат только одной строки.

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