【问题标题】:Parsing only left side on Join在加入时仅解析左侧
【发布时间】:2014-01-13 19:31:24
【问题描述】:

在下面的代码中,我想将表 c_files cf 与两个括号内的第二个查询的结果(别名 x)连接起来。

SELECT f_cl_path f,cf.f_id, 'xx' as jo 
FROM c_files cf 
LEFT JOIN 
    (SELECT f_cl_path f, f_id, f_workgroup, 'yy' as jo FROM myOtherTable 
     WHERE f_workgroup ='1234' AND f_status<=2) x 
ON x.f_id=cf.f_id  
WHERE cf.f_workgroup='798190' and jo='xx';

我只想获得jo='xx' 的元素。但这不起作用。当我使用jo='yy' 尝试时,我得到了结果,但我需要使用jo='xx'

【问题讨论】:

  • 考虑提供适当的 DDL 和/或 sqlfiddle 以及所需的结果集
  • jo 是子查询中值为“yy”的“常量”的别名。 ('xx' as jo 根本不会被考虑)。所以不,'xx' != 'yy'
  • 你的别名应该不同,最后一个 jo 由 mysql 获取,因此将自定义列重命名为 jox 和 joy
  • @MKhalidJunaid 第一个即使命名为 jox 也不会被考虑。在同一“查询级别”的 where 子句中不能使用别名。
  • @Raphaël Althaus 还有其他方法可以在 where 子句中使用此别名吗?

标签: mysql sql select join left-join


【解决方案1】:

看到你的 cmets 后,也许这张图片会有所帮助。

如果我没记错的话,你的情况是这样的:

SELECT f_cl_path f,cf.f_id
FROM c_files cf
LEFT JOIN (SELECT f_cl_path f, f_id, f_workgroup FROM myOtherTable 
     WHERE f_workgroup ='1234' AND f_status<=2) as x
ON x.f_id=cf.f_id  
WHERE cf.f_workgroup='798190' and x.f_id IS NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2023-03-15
    • 2015-04-05
    • 2022-01-19
    • 1970-01-01
    • 2023-01-09
    相关资源
    最近更新 更多