mysql - 选择同一行两次,并使副本不可变

标签 mysql select join null immutability

由于我执行的左连接有时不提供结果,我的“第一个”表的 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/

相关文章:

php - 使用多个 MySQL 列值填充一维数组

mysql - 将 MySQL 函数的结果(在 WHERE 中使用)保留在我的查询结果中

sqlite - 在 Sqlite 中选择包含一定数量单词的条目?

sql - 我如何执行这个简单的 SQL SELECT 语句?

php - 10 月 CMS 使用迁移创建 UUID 默认值触发器

javascript - js mysql php select2.js 向下拉列表添加 2 个值 其中一个应该从 js 调用

javascript - 如何在 jquery 中添加选项以选择 optgroup?

r - 如何在 R 中使用 ff 包合并两个大型 data.frames?

mysql - 通过组合其他两个表的前 n 行来填充表

sql - 左连接和内连接组