由于我执行左连接有时无法提供结果,我的"第一个" 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错误)
(出于设计原因,明确选择值是不可能的)
答案 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访问)。