@Martin Smith 是正确的,您不能使用*.x和引用多个表中的列。x但是,如果一个或多个表没有这样的列,则有一种方法可以编写一个查询来显示它们存在的表中的所有列而不会中断。这是(错误)使用范围解析的一种相当复杂的方式。
假设一些表(在示例中)有一个名为 的列b,而其他一些表(这里)没有这样的列。然后,您可以将连接替换为和连接,以及将查询替换为:dxcINNERCROSS APPLYLEFTOUTER APPLY
SELECT
a.name,
a.salary,
b.x AS bx,
'WITHOUT column x' AS cx,
d.x AS dx
FROM
a
INNER JOIN b
ON a.aid = b.aid
LEFT JOIN c
ON a.aid = c.aid
LEFT JOIN d
ON a.aid = d.aid ;
将被写为:
SELECT
a.name,
a.salary,
bx,
cx,
dx
FROM
( SELECT a.*,
'WITHOUT column x' AS x
FROM a
) a
CROSS APPLY
( SELECT x AS bx
FROM b
WHERE a.aid = b.aid
) b
OUTER APPLY
( SELECT x AS cx
FROM c
WHERE a.aid = c.aid
) c
OUTER APPLY
( SELECT x AS dx
FROM d
WHERE a.aid = d.aid
) d ;
在 SQL-Server 2008 测试:SQL-Fiddle