Select 同一行两次,并使副本不可变

Select same row twice, and make the copy immutable

由于我执行的左连接有时不提供结果,我的 "first" table 的 ID 不知何故被设置为 0。我现在想 select两次ID,并且复制immutable,这样即使加入失败我仍然可以访问它。

这是我的查询:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.ID = table2.ID 
LEFT JOIN table3 ON table1.ID = table3.ID

table1 中的每一行仅在 table2 或 table3 中具有相同的 ID,因此,对于每一行,两个连接之一将 "fail".这是我得到的结果(模拟结果):

+------+------------+------------+------------+------------+------------+------------+
|  ID  | Table1Col1 | Table1Col2 | Table2Col1 | Table2Col2 | Table3Col1 | Table3Col2 |
+------+------------+------------+------------+------------+------------+------------+
| NULL | Something  | Something  | NULL       | NULL       | Something  | Something  |
| NULL | SomeValue  | SomeValue  | Something  | Something  | NULL       | NULL       |
+------+------------+------------+------------+------------+------------+------------+

我想要实现的目标:避免 "ID" 为 NULL。

(此外,selecting "table1.ID as MyID, *" 给我一个 SQL 错误)

(出于设计原因,明确选择值是不可能的)

以下查询应该有效,明确命名字段...

SELECT table1.ID, table1.Table1Col1, table1.Table1Col2, 
       table2.Table2Col1, table2.Table2Col2, 
       table3.Table3Col1, Table3.Table3Col2
FROM table1
LEFT JOIN table2 ON (table1.ID=table2.ID)
LEFT JOIN table3 ON (table1.ID=table3.ID)

更新 用于通配符:当 * 不是唯一的 select "column" 时,您必须提供 table。

SELECT table1.ID as MyID, table1.*, table2.*, table3.*
FROM table1
LEFT JOIN table2 ON (table1.ID=table2.ID)
LEFT JOIN table3 ON (table1.ID=table3.ID)

请注意,相同的列将以这种方式出现多次,因此无论结果如何处理,都应该是预期的结果。例如,在 PHP 中,我相信最后一个值获胜(如果按列名访问)。