0

SQL 2000 サーバーを使用しています。2 つのテーブルがあります。テーブル 1 & テーブル 2。テーブル 1 には顧客の氏名、住所、電話番号があり、テーブル 2 には短い名前しかありません。名前に短い名前(table2)が含まれているtable1から、氏名、住所、電話番号を表示したい。

表1

Frank Wisely
Albert Smith
Tony Gonzalez
Peter Nicholas
Andrew Wonder
Adams Tony

表2

Tony
Smith
Wonder

私が得たい結果は

Tony Gonzalez
Adams Tony
Albert Smith
Andrew Wonder

助けていただけますか?

4

1 に答える 1

0

表の中だけでなく、もっと多くの列があることを願っていますname! テーブルを結合する必要があるため、同じ値を共有する列が必要になります。このようなもの:

table1
------
PK Name
-- ----------------
1  Frank Wisely
2  Albert Smith
3  Tony Gonzalez
4  Peter Nicholas
5  Andrew Wonder
6  Adams Tony

table2
------
PK Name
-- ----------------
2  Smith
5  Wonder
6  Tony

それらに参加する方法は次のとおりです。

select
   a.*
    FROM Table2            b
        inner join Table1  a ON a.pk=b.pk

結合する PK タイプの列がない場合は、部分文字列で結合を試みることができますが、誤った一致のために結果にエラーが発生する可能性が高くなります。サンプル データに 6 行ある場合はすべて問題ないように見えますが、ジョン スミス、ビル スミス、マイク スミス、ジョン ブラウン、マイク ブラウンの場合はどうなるでしょうか。どうやってジョンを見つけるの?LIKE を使用してテーブルに参加できますが、これを行うのは奇妙に思えます。

このクエリは、あなたが求めていることを行います:

select
   a.*
    FROM Table2            b
        inner join Table1  a ON a.Name like '%'+b.Name+'%'

作業例:

create table Table1  (name varchar(100), junk varchar(5))
insert into Table1 values ('Frank Wisely','aaa')
insert into Table1 values ('Albert Smith','bbb')
insert into Table1 values ('Tony Gonzalez','ccc')
insert into Table1 values ('Peter Nicholas','ddd')
insert into Table1 values ('Andrew Wonder','eee')
insert into Table1 values ('Adams Tony','fff')

Create table Table2 (name varchar(100))
insert into Table2 VALUES ('Tony')
insert into Table2 VALUES ('Smith')
insert into Table2 VALUES ('Wonder')


select
   a.*
    FROM Table2            b
        inner join Table1  a ON a.Name like '%'+b.Name+'%'

出力:

name             junk
---------------- -----
Albert Smith     bbb
Tony Gonzalez    ccc
Andrew Wonder    eee
Adams Tony       fff

(4 row(s) affected)
于 2012-04-19T19:45:06.373 に答える