如何在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
中的所有值进行比较,而不仅仅是来自匹配行的一些不确定值。
如何在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
中的所有值进行比较,而不仅仅是来自匹配行的一些不确定值。