我有一个选择查询:
Select left([Foundation_Account_Name],4)
From [dbo].[tbl_Foundation_Account]
Where [Foundation_Account_Name]
返回
MAZA
SUMI
APLH
我有第二个Select查询,它从临时表中选择相同的字段
Select left([Foundation Account Name],4)
From [dbo].[Import_tbl_RDO]
Where [Foundation Account Name] IS NOT NULL))
返回
SUMI
我想在where子句中使用这些select查询,当我在SUMI
上运行select时,它只返回tbl_Foundation_Account
。我的想法就是这个,
Select left([Foundation_Account_Name],4)
From [dbo].[tbl_Foundation_Account]
Where [Foundation_Account_Name] = (Select left([Foundation_Account_Name],4)
From [dbo].[tbl_Foundation_Account]
Where [Foundation_Account_Name] = (Select left([Foundation Account Name],4)
From [dbo].[Import_tbl_RDO]
Where [Foundation Account Name] IS NOT NULL))
理论上(至少在我的脑海中)主要选择查询仅从tbl_Foundation_Account
中选择记录,其中第二个和第三个选择查询彼此相等,应该是SUMI
。现在,这只是什么都没有回来,我得到的兔子洞越深,我就越迷茫。这个查询是搞砸了,还是我接近实现我想要的结果
答案 0 :(得分:0)
您可以使用intersect
从这两个查询中获取常见结果。
Select left([Foundation_Account_Name],4)
From [dbo].[tbl_Foundation_Account]
INTERSECT
Select left([Foundation Account Name],4)
From [dbo].[Import_tbl_RDO]
Where [Foundation Account Name] IS NOT NULL
答案 1 :(得分:0)
只是建立你已经拥有的东西......并将桌子加在一起...... 虽然相交似乎更清洁......
with A as (SELECT left([Foundation_Account_Name],4) ID
FROM [dbo].[tbl_Foundation_Account]),
b as (SELECT left([Foundation Account Name],4) ID
FROM [dbo].[Import_tbl_RDO])
SELECT C.left([Foundation_Account_Name],4)
FROM [dbo].[tbl_Foundation_Account] C
INNER JOIN A on A.ID = C.left([Foundation_Account_Name],4)
INNER JOIN B on A.ID = B.ID
答案 2 :(得分:0)
你真正想要做的是:
SELECT {{FIELDS TO QUERY}}
FROM [dbo].[tbl_Foundation_Account] fa
WHERE EXISTS (
SELECT *
FROM [dbo].[Import_tbl_RDO] rdo
WHERE left(rbo.[Foundation Account Name],4) = left(fa.[Foundation Account Name],4)
)
或者,如果您需要访问Import_tbl_RDO
中的任何数据,您也可以简单地加入表格:
SELECT {{FIELDS TO QUERY}}
FROM [dbo].[tbl_Foundation_Account] fa
INNER JOIN [dbo].[Import_tbl_RDO] rdo
ON left(rbo.[Foundation Account Name],4) = left(fa.[Foundation Account Name],4)
"缺点"第二种方法是,如果您有多个符合条件的Import_tbl_RDO
行,您最终会得到重复的行(可能需要也可能不需要)。
答案 3 :(得分:0)
你的问题并没有完全像提出的那样有意义,因为如果你真正想要的结果是临时表上的查询返回的内容,那你为什么不直接使用它呢?
我认为你真正想要的是过滤查询结果,根据你对temp表的查询结果返回更多列。如果临时表查询保证每次只返回一行,那么你可以这样写:
Select
-- column1, column2, ...
From [dbo].[tbl_Foundation_Account]
Where left([Foundation Account Name],4) = (
Select left([Foundation Account Name],4)
From [dbo].[Import_tbl_RDO]
Where [Foundation Account Name] IS NOT NULL
)
但更可能的情况是,在某些情况下,临时表查询可以返回多行,或者可能没有。在这种情况下,您可能需要IN
条件:
Select
-- column1, column2, ...
From [dbo].[tbl_Foundation_Account]
Where left([Foundation Account Name],4) IN (
Select left([Foundation Account Name],4)
From [dbo].[Import_tbl_RDO]
Where [Foundation Account Name] IS NOT NULL
)