Как использовать LIKE в SQL Query в предложении where, но значение LIKE будет получено в другом запросе? - PullRequest
0 голосов
/ 13 февраля 2020

Как использовать LIKE в SQL Запрос в предложении where, но значение LIKE будет получено в другом запросе? Например:

SELECT Code FROM TABLE1 where Code LIKE '(select top 1 Grade FROM TABLE2 WHERE Age>30)%'

Пожалуйста, кто-нибудь может мне помочь

Ответы [ 3 ]

0 голосов
/ 13 февраля 2020

Вы должны объединить результат подзапроса с символом '%':

SELECT Code FROM TABLE1 where Code LIKE (select top 1 Grade FROM TABLE2 WHERE Age>30) || '%'

Вы можете изменить оператор || на +, если это оператор объединения вашей базы данных. Или с помощью функции concat():

SELECT Code FROM TABLE1 where Code LIKE concat((select top 1 Grade FROM TABLE2 WHERE Age>30), '%')

Обратите внимание, что использование top 1 без order by не гарантирует, что результат будет таким, как вы ожидаете.

0 голосов
/ 13 февраля 2020

Понятия не имею, почему вы используете top без order by. Обычным решением является использование EXISTS:

SELECT t1.Code
FROM TABLE1 t1 
WHERE EXISTS (SELECT 1
              FROM table2 t2
              WHERE t2.Age > 30 AND
                    t1.code LIKE t2.Grade + '%'
             );

. Предполагается, что + используется для конкатенации строк.

Я предполагаю, что это именно то, что вам действительно нужно - сравнение со всеми значениями в table2, а не с каким-то неопределенным значением из соответствующей строки.

0 голосов
/ 13 февраля 2020

Полагаю, ваши таблицы

create table TABLE1
(
    Code varchar(50)
)

create table TABLE2
(
    Grade varchar(50),
    Age int
)

Добавление материалов

insert TABLE1 values ('AAE')
insert TABLE1 values ('BBM')

insert TABLE2 values ('AAE00001', 22)
insert TABLE2 values ('BBM22501', 31)

Запрос

select 
Code 
from
TABLE1 inner join TABLE2 on TABLE1.Code = LEFT(TABLE2.Grade, LEN(TABLE1.Code))
where Age > 30

Результат

enter image description here

Если вы хотите что-то подобное, имейте в виду, что это ужасно . Я не помогаю тебе, это не решение. Вы должны пересмотреть свой дизайн.

...