您收到错误的原因是由于别名AS X
。但问题确实是你使用了*
,而不是列出您想要的字段。
在第一个查询中,SELECT *
实际上会产生如下字段:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
这工作得很好,除非您尝试直接通过名称引用字段并且不使用它的别名。不管怎样,你的 SQL 引擎不会有这个问题,但无论你对结果集做什么,仍然可能有问题。
但是,当您将查询移至子查询并为结果添加别名时AS X
,那么你最终会得到:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
现在你可以明白它为什么抱怨了。你会明白为什么它也不好用*
,因为这种组合可能会工作一段时间,然后您向现有表添加一个新字段,该字段与另一个表相同,然后砰,您使用这两个表编写的每个查询现在都需要重写。