2012-11-07 50 views
1

我有表ABC。现在表A作为列A1(主键),表B有列B1(主键)和表C有列A1(外键表A.A1),B1(外键表B.B1)。交叉连接中的SQL Server子查询返回错误

现在我正在写的,其列出从AB所有行的查询,如果行被找到匹配表C否则为0

SELECT 
    ISNULL((SELECT CAST(1 AS BIT) 
      FROM C 
      WHERE C.A1 = A.A1 AND C.B1 = B.B1),0) AS [TAG], 
    A.A1, 
    B.B1 
FROM A CROSS JOIN B 

这将被设置为1位列即使查询在组合A1B1列后没有重复行,查询也会生成Subquery returned more than 1 value.错误。

+0

发布子查询的结果单独 – jsj

回答

2

试试这个,

SELECT CAST(COALESCE(c.b1, 0) AS BIT) TAG 
FROM 
     (
      SELECT A1, B1 
      FROM A CROSS JOIN B 
     ) D LEFT JOIN C 
       ON c.A1 = d.A1 AND 
        c.B1 = D.B1 
+0

列'A1'和'B1'是'varchar'。在'C'表中检查存在之后,我必须动态创建查询中的位列。 –

+0

@SohamDasgupta添加了更新。 –

+0

辉煌。按预期工作。 –