簡體   English   中英

有沒有辦法在 FROM 子句中使用多個源表而不在 SQL 服務器中使用 JOIN?

[英]Is there any way to use multiple source tables in FROM clause without using JOIN in SQL Server?

我可以像這樣在 FROM 子句中實現一個嵌套的 SELECT 語句,它可以工作:

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

理想情況下,我希望在不使用連接的情況下在 FROM 子句中添加多個類似的嵌套 SELECT 語句,最終得到這樣的結果(以下代碼顯然不起作用)

 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,但出於某種原因,我希望在沒有JOIN 的情況下這樣做。 在 SQL 服務器中是否可能發生這樣的事情?

如果您可以保證從子查詢中只返回一個值,您可以將選擇嵌套在 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施加唯一約束,要么向每個子選擇添加一些內容,以保證只返回一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM