如何在where子句中的SQL查询中使用LIKE,但LIKE的值会来自其他查询?

How to use LIKE in SQL Query in where clause, but the value of LIKE will come from in other query?

如何在SQLwhere子句的查询中使用LIKE,但LIKE的值会来自于其他查询? 例如:

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

请任何人帮助我

我想你的桌子

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

结果

如果它是您想要的东西,请注意它很糟糕。我不帮你,这不是解决办法。您必须检查您的设计。

您必须将子查询的结果与字符 '%':

连接起来
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), '%')

请注意,在不使用 order by 的情况下使用 top 1 并不能保证结果如您所愿。

我不知道你为什么要使用 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 中的所有值进行比较,而不仅仅是来自匹配行的一些不确定值。