5

like2 つの異なるテーブルの演算子を使用して SQL クエリを実行するにはどうすればよいですか?

次のようなものが必要です:

select * from table1 where name like %table2.name

これは一般的なフィールドではなく、別のテーブルのフィールドの部分文字列です。

4

3 に答える 3

4

編集

(元の答えはさらに下にあります)

あなたのコメント(そしてその後の編集)は質問を完全に変えます。

これを行うには、結合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の場合は、さまざまなセミコロンを追加し、GOsを削除して、...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'

これにより、行が関連付けられている場所foosomeTablebar「 SOMETHING」で始まり「SOMETHINGELSE」で終わる場所がわかります。someOtherTablesomeFieldfoobar

于 2010-01-21T09:47:18.667 に答える
3

正確な構文については特にわかりませんが、アイデアは次のとおりです。

select ... from (
    select ID, Foo as F from FooTable
    union all
    select ID, Bar as F from BarTable) R
where R.F like '%text%'
于 2010-01-21T09:15:08.940 に答える
2

@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
于 2012-04-24T18:48:36.393 に答える