like
2 つの異なるテーブルの演算子を使用して SQL クエリを実行するにはどうすればよいですか?
次のようなものが必要です:
select * from table1 where name like %table2.name
これは一般的なフィールドではなく、別のテーブルのフィールドの部分文字列です。
like
2 つの異なるテーブルの演算子を使用して SQL クエリを実行するにはどうすればよいですか?
次のようなものが必要です:
select * from table1 where name like %table2.name
これは一般的なフィールドではなく、別のテーブルのフィールドの部分文字列です。
(元の答えはさらに下にあります)
あなたのコメント(そしてその後の編集)は質問を完全に変えます。
これを行うには、結合LIKE
の句の一部として使用できます。ON
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
(これはSQL Serverのバージョンです。MySQLの場合は、さまざまなセミコロンを追加し、GO
sを削除して、...LIKE concat('%', b.bar)
代わりに使用します。)
これは、id
=2を使用bar
してテーブル内の="ne"を検索b
し、%
演算子の前に追加して、からの結果をフィルタリングするために使用します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'
これにより、行が関連付けられている場所foo
とsomeTable
、bar
「 SOMETHING」で始まり「SOMETHINGELSE」で終わる場所がわかります。someOtherTable
someField
foo
bar
正確な構文については特にわかりませんが、アイデアは次のとおりです。
select ... from (
select ID, Foo as F from FooTable
union all
select ID, Bar as F from BarTable) R
where R.F like '%text%'
@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