0

我使用 SQL 2000 服务器。我有两张桌子;表 1 和表 2。表1有客户的全名、地址、电话,表2只有简称。我想显示 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

你能帮忙吗?

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 行时看起来都很好,但是当您有 john smith、bill smith、mike smith、john brown 和 mike brown 时会发生什么?你怎么找到约翰?您可以使用 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 回答