繁体   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