【问题标题】:SQL right join with functional condition具有功能条件的 SQL 右连接
【发布时间】:2018-10-10 17:35:48
【问题描述】:

我有这样的加入:

             "SELECT ADB.column1, BDB.column2 FROM ADB RIGHT JOIN BDB ON  
        (SELECT SUBSTRING( ADB.column1, LEN(ADB.column1) - 
     CHARINDEX('|',REVERSE(ADB.column1)) + 2  ,
 LEN(ADB.column1)  ) FROM BDB) = BDB.column2", sqlCon);

当我运行这段代码时,我得到了错误

System.Data.SqlClient.SqlException: '子查询返回超过 1 个 价值。当子查询跟随 =, !=, 时,这是不允许的

、>= 或当子查询用作表达式时。'

如何强制子查询每行仅获取 1 个数据?

【问题讨论】:

  • 那么错误信息的哪一部分你不明白?
  • 哪个 dbms? SQL 只是许多 dbms 供应商使用的一种语言。每个供应商都有自己的语法。

标签: sql subquery right-join


【解决方案1】:

我认为您的查询将如下所示

SELECT ADB.column1,
         BDB.column2 FROM
        ADB RIGHT JOIN BDB ON  
            ( SUBSTRING( ADB.column1, LEN(ADB.column1) - 
         CHARINDEX('|',REVERSE(ADB.column1)) + 2  ,
     LEN(ADB.column1) ) 
       ) = BDB.column2

您正在加入 ADB 和 BDB,但在加入条件下使用 select from BDB 这没有任何意义

【讨论】:

  • 您说得对,先生!我的错。查询太复杂,为了简单起见,我只展示了一部分。非常感谢您的完美回答!
  • 刚刚做到了。您必须等待一段时间,直到您可以标记答案:)
【解决方案2】:

看来你确实把自己弄糊涂了...你不需要子选择FROM BDB,因为你有所有这些ADB.column1 转换。

SELECT ADB.column1, BDB.column2 
FROM ADB 
RIGHT JOIN BDB 
ON  SUBSTRING(ADB.column1, LEN(ADB.column1) - 
       CHARINDEX('|',REVERSE(ADB.column1)) + 2  ,
       LEN(ADB.column1)
    ) = BDB.column2

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 2010-12-02
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多