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 中,我相信最后一个值获胜(如果按列名访问)。
由于我执行的左连接有时不提供结果,我的 "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 中,我相信最后一个值获胜(如果按列名访问)。