Правильное соединение SQL с функциональным состоянием - PullRequest
0 голосов
/ 10 октября 2018

У меня есть такое объединение:

             "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 значения.Это недопустимо, если подзапрос следует =,! =, <, <=, </p>

,> = или когда подзапрос используется в качестве выражения. '

Как заставить подзапрос получать только 1 данные в строке?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Кажется, вы запутались ... Вам не нужно выбирать 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
0 голосов
/ 10 октября 2018

я думаю, что ваш запрос будет похож на ниже

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, но при использовании условия объединения выберите BDB, который не имеет никакого смысла

...