【问题标题】:SQL Case Statement with SELECT inside INNER JOIN. Error of multi-part could not be bound在 INNER JOIN 中带有 SELECT 的 SQL 案例语句。多部分错误无法绑定
【发布时间】:2017-12-22 20:03:02
【问题描述】:

我正在写一个INNER JOIN,其中添加了 CompanyId 等字段。

但是在我的CASE 里面的INNER JOIN 我在WHERE 之后得到一个错误

IR.MyId 和 ICB1.MyId 上的错误说

“无法绑定多部分标识符”

我对这个查询的意图是在INNER JOIN 中添加一个CASE

所以第一列是A.CompanyId。第二列将是 CASE 语句,用于检查 ID 是否存在于另一个表中。如果没有,它将执行另一个SELECT 语句,否则只需MyID

但我在CASE WHEN 内的SELECT COUNT(*) 上遇到错误。

感谢任何帮助。谢谢。

INNER JOIN
    (SELECT DISTINCT 
         A.CompanyId, 
         CASE 
            WHEN (SELECT count(*) 
                  FROM Table1 IBC1 
                  WHERE IR.MyId = ICB1.MyId) == 0
                THEN 1 
                ELSE 0 
         END 
     FROM 
         cmp.CompanyNews A) E ON NP.CompanyId = E.CompanyId

【问题讨论】:

  • case when (SELECT count(*) FROM Table1 IBC1 WHERE IR.MyId = ICB1.MyId ) == 0== 替换为 =
  • 尝试为您的案例添加标识符:THEN 1 else 0 END as NameOfIdentifier
  • @John 请提供完整的查询,并为您使用的 RDBMS 添加标签(sql-server,oracle,...)
  • 哪里没有像 IR 这样的别名

标签: sql-server join case


【解决方案1】:

我没有您的完整查询,但如果可行,我会采取以下方法:

...
    CASE
        WHEN ICB1_ID.ID IS NULL
        THEN 1
        ELSE 0
    END [ColumnName]
FROM
    ...
    INNER JOIN
        (
            SELECT DISTINCT A.CompanyId
            FROM cmp.CompanyNews A
        ) E
    ON NP.CompanyId =  E.CompanyId
    OUTER APPLY
        (
            SELECT TOP 1 ICB1.MyID ID
            FROM Table1 IBC1
            WHERE ICB1.MyId = IR.MyId
        ) ICB1_ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2013-07-20
    • 2016-03-05
    • 1970-01-01
    • 2012-01-09
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多