如何使用 like
操作符从两个不同的表中进行 SQL 查询?
我需要类似于以下的查询语句:
select * from table1 where name like %table2.name
这不是一个普通的字段,而是另一张表中字段的子字符串。
如何使用 like
操作符从两个不同的表中进行 SQL 查询?
我需要类似于以下的查询语句:
select * from table1 where name like %table2.name
这不是一个普通的字段,而是另一张表中字段的子字符串。
你的评论(以及后来的编辑)完全改变了问题。
为此,您可以在连接的ON
子句中使用LIKE
:
CREATE TABLE a (foo varchar(254))
GO
CREATE TABLE b (id int, bar varchar(254))
GO
INSERT INTO a (foo) VALUES ('one')
INSERT INTO a (foo) VALUES ('tone')
INSERT INTO a (foo) VALUES ('phone')
INSERT INTO a (foo) VALUES ('two')
INSERT INTO a (foo) VALUES ('three')
INSERT INTO b (id, bar) VALUES (2, 'ne')
INSERT INTO b (id, bar) VALUES (3, 't')
SELECT a.foo
FROM a
INNER JOIN b ON a.foo LIKE '%' + b.bar
WHERE b.id = 2
GO
,并使用...LIKE concat('%', b.bar)
。)
它使用id
=2在表b中查找bar
="ne",然后在其前面添加%
运算符,并将其用于过滤来自a
的结果。结果如下:
one
tone
phone
如果您可以将运算符存储在b.bar中,则无需进行连接操作。
另外,我很惊讶地发现这也适用于 SQL Server:
SELECT foo
FROM a
WHERE foo LIKE (
SELECT TOP 1 '%' + bar
FROM b
WHERE id = 2
)
然而使用JOIN
的版本可能更加灵活。
这应该可以让你开始了。
(可以说不再相关)
很难确定你在问什么,但这里有一个使用LIKE
来限制从JOIN
中结果的示例:
SELECT a.foo, b.bar
FROM someTable a
INNER JOIN someOtherTable b
ON a.someField = b.someField
WHERE a.foo LIKE 'SOMETHING%'
AND b.bar LIKE '%SOMETHING ELSE'
这将从someTable
中获取foo
,从someOtherTable
中获取bar
,这些行由someField
相关联,并且foo
以"SOMETHING"开头,bar
以"SOMETHING ELSE"结尾。
我不确定具体的语法,但这是一个想法:
select ... from (
select ID, Foo as F from FooTable
union all
select ID, Bar as F from BarTable) R
where R.F like '%text%'
F
,所以应该是 R.F like
,而不是 R.Foo like
。 - Peter LangSELECT ID, Foo as F FROM FooTable WHERE Foo LIKE '%text%' UNION ALL SELECT ID, Bar as F FROM BarTable WHERE Bar LIKE '%text'
- T.J. Crowder根据@TJCrowder的回答
create table #A (
id varchar(10)
)
create table #b(
number varchar(5)
)
insert into #A values('123')
insert into #A values('456')
insert into #A values('789')
insert into #A values('0123')
insert into #A values('4567')
select * from #A
insert into #B values('12')
insert into #b values('45')
insert into #b values('987')
insert into #b values('012')
insert into #b values('666')
select * from #a, #b
where #a.id like '%' + #b.number + '%'
select #A.* from #A,#B ...
or
select * from #a, #b
where #a.id like #b.number + '%' -- one side match