如何在FULL OUTER JOIN两表时仅选择第一张表的指定列?
解决方案:指定FULL OUTER JOIN后的目标列
嘿,这问题很常见!你之前用SELECT *能正常运行,但指定列失败的原因大概率是没有明确给列加上表别名区分,或者列名重复时没指明来源表。
直接给你改好的SQL示例,你只需要把m.subject, m.sender换成你实际需要的message表列就行:
SELECT -- 明确列出message表中你需要的列,用表别名m前缀 m.id, m.subject, m.sender, m.create_time, -- 再列出message_execution表的列,同样用ex前缀避免歧义 ex.result, ex.start, ex.finish, ex.message FROM message m FULL OUTER JOIN ( SELECT id, result, start, finish, message FROM message_execution ) ex ON ex.id = m.id WHERE m.id = '1626'
关键注意点:
- 当两张表有同名列(比如你这里的
id和message),必须用表别名(m.或ex.)指定来源,否则数据库会报错列名不明确。 - 如果你想保留
FULL OUTER JOIN的完整特性(即包含message中没有该id但message_execution中有该id的行),当前的WHERE m.id = '1626'会过滤掉这些行,这时候应该把条件移到ON子句里,改成:
这样就能同时匹配两边id为1626的行,不会过滤掉任何一边的匹配结果。ON ex.id = m.id AND m.id = '1626'
内容的提问来源于stack exchange,提问作者mahan
相关产品推荐
相关产品推荐

