由于我执行的左连接有时不提供结果,我的“第一个”表的 ID 不知何故设置为 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 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 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 中,我相信最后一个值获胜(如果通过列名访问)。
关于mysql - 选择同一行两次,并使副本不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849891/