选择相同的行两次,并使副本不可变

时间:2016-08-09 11:48:51

标签: mysql select join null immutability

由于我执行左连接有时无法提供结果,我的"第一个" table以某种方式设置为0.我现在想要选择ID两次,并使副本不可变,这样即使连接失败,我仍然可以访问它。

这是我的问题:

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

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

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

我想要实现的目标:保持" ID"来自NULL。

(另外,选择" table1.ID为MyID,*"给我一个SQL错误)

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

1 个答案:

答案 0 :(得分:2)

以下查询工作,明确命名字段...

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 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中,我认为最后一个值获胜(如果通过columnname访问)。