如何使用Condition和匹配列值来编写子查询

时间:2017-03-09 06:09:34

标签: sql sql-server sql-server-2008

以下是我的查询

select * from tbl_incometax_master where (select Slabtitle=Gender,SlabSubTitle=Senior_CTZN_Type FROM etds.dbo.tbl_Employee_Master WHERE employee_id = 1218  AND company_id = 1987)

当尝试在sql server 2008 r2中执行以下错误时: Msg 4145,Level 15,State 1,Line 2 在预期条件的上下文中指定的非布尔类型的表达式,接近'。'。

4 个答案:

答案 0 :(得分:1)

在父查询的where子句中没有任何列,重要的是要知道只能使用子查询定义列标准。

示例查询...

 select * from tbl_incometax_master where <column> (select <subquery column> FROM etds.dbo.tbl_Employee_Master WHERE employee_id = 1218  AND company_id = 1987)

答案 1 :(得分:0)

也许这就是你打算做的事情(使用EXISTS):

select *
from tbl_incometax_master
where exists (
        select 1
        from etds.dbo.tbl_Employee_Master
        where employee_id = 1218
            and company_id = 1987
            and Slabtitle = Gender
            and SlabSubTitle = Senior_CTZN_Type
        )

它是一个相关的子查询,外部查询检查当前行的子查询中是否至少存在一行。

答案 2 :(得分:0)

你的Where with no operator(=,&lt;,&gt;,IN)中有一个select子句!并且在选择内部'='! 它们都不允许在SQL查询中使用。

答案 3 :(得分:0)

select * from tbl_incometax_master table1 LEFT JOIN 
(
select Gender,Senior_CTZN_Type FROM etds.dbo.tbl_Employee_Master WHERE     employee_id = 1218  AND company_id = 1987
) table2
ON 
table1.Slabtitle=table2.Gender
AND table1.SlabSubTitle=table2.Senior_CTZN_Type
WHERE table2.Slabtitle IS NOT NULL