交叉连接中的SQL Server子查询返回错误

时间:2012-11-07 05:49:59

标签: sql sql-server-2008 tsql subquery cross-join

我有表ABC。现在将A列作为列A1(主键),表B包含列B1(主键),表C包含列A1 (表A.A1的外键),B1(表B.B1的外键)。

现在我正在编写一个查询列出AB的所有行以及一个位列,如果在表C中找到匹配的行,则该列将设置为1否则为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

即使查询在合并Subquery returned more than 1 value.A1列后没有重复行,此查询也会产生B1错误。

1 个答案:

答案 0 :(得分: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