就像在两个不同的表中操作一样

时间:2012-04-19 19:33:14

标签: sql-server-2000

我使用的是SQL 2000服务器。 我有两张桌子; table1&表2。 表1有客户的全名,地址,电话,table2只有简称。 我想显示table1中的全名,地址,电话,其名称中有短名称(table2)。

表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

你能帮忙吗?

1 个答案:

答案 0 :(得分: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)