在 LEFT JOIN 上仅选择表中的某些列

Posted

技术标签:

【中文标题】在 LEFT JOIN 上仅选择表中的某些列【英文标题】:Select only some columns from a table on a LEFT JOIN 【发布时间】:2010-11-22 17:08:04 【问题描述】:

是否可以?

【问题讨论】:

【参考方案1】:

在您的选择语句中将* 添加到该表中,并用逗号与其他列分开:

SELECT table1.*, table2.col2, table2.col3
FROM table1
LEFT JOIN table2
ON...

来源:https://***.com/a/3492919/3417198

【讨论】:

终于找到了我想要的答案。当然,可以在每个嵌套选择中指定每一列,但通常需要级联 5 个或更多子查询才能将不同的列附加到主临时表,并且重写和跟踪所有列非常痛苦每个子查询。这样就解决了【参考方案2】:

如果你想要一些 table1 的列和一些 table2 的列,你可以这样做

SELECT t1.col1, t1.col2, t1.col3, t2.col1, t2.col2, t2.col3
FROM table1 t1
LEFT JOIN table2 t2
ON...

【讨论】:

【参考方案3】:

当然。只需像在任何查询中一样列出您要选择的列:

SELECT table1.column1, table1.column2, table2.column3
FROM table1
LEFT JOIN table2 ON (...)

请注意,我在所有列中都添加了 table1.table2. 前缀,以确保两个表中存在同名字段时不会出现任何歧义。

【讨论】:

可能值得补充的是,用它们来自的表作为前缀是个好主意,例如table1.column1、table2.column2 等等,所以停止歧义错误,只是为了一般的可读性。 另外,如果您有任何不明确的列名,您可以使用点语法指定使用哪个表:SELECT table1.id, table2.name FROM table1 LEFT JOIN table2 ON (...)跨度> 我想从我要加入的表中选择列,而不是从第一个表中。 @Psyche:没有什么不同。正如 Vorey 所描述的,table2.column3 来自连接表,而不是原始源表。

以上是关于在 LEFT JOIN 上仅选择表中的某些列的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL - 仅当 LEFT JOIN 中的行不存在时才选择

Laravel 4 查询生成器:LEFT JOIN ... AND ... 查询

从 LEFT JOIN 中选择最大的行

SQL 如何使用 LEFT JOIN 从表中选择单个值,在 Google Datastudio 中

如何使用Yii2中的left join从两个表中获取所有列数据

MYSQL Left Join 如何选择 NULL 值?