搜索1个字段的查询,但搜索3个字段

时间:2013-08-27 17:45:14

标签: sql sql-server search

我有一个带有电话簿选项的软件。也可以将此电话簿与数据库相结合。

我的问题是:这本电话簿只能搜索数据库中的一个字段,但数据库中的某些数据有3个字段作为电话号码。

表值可能是这样的:

从table_Phonebook

中选择*
id     |Name        |PhoneNumber1  |PhoneNumber2   |PhoneNumber3
-------------------
 1     |John Wood   |1-200-123450  |1-200-123450   |1-200-333333
 2     |Bill Gates  |1-201-65481   |1-641-88481    |1-201-444444
 3     |Paul Dilon  |1-200-987456  |1-200-456987   |1-200-555555

从电话簿中选择姓名,其中PhoneNumber1 ='1-200-123450' 返回值是'John Wood'

对于我希望拥有的视图:

从view_Phonebook中选择姓名,其中PhoneNumber ='1-201-444444'

返回值应为'比尔盖茨'

我应该在我的数据库上定义一个视图,怎么做?我怎么能这样呢?

修改

实际上我无法在电话簿中写任何疑问。在这本电话簿中,我只能定义表/视图名称以及包含电话号码的字段名称。这意味着在电话簿中我只能将PhoneNumber1或PhoneNumber2或PhoneNumber3定义为搜索字段,但我希望能够同时搜索所有这些字段。

是否可以从table_Phonebook创建一个以这种形式返回值的视图:

 1     |John Wood   |1-200-123450
 1     |John Wood   |1-200-123450
 1     |John Wood   |1-200-333333
 2     |Bill Gates  |1-201-65481
 2     |Bill Gates  |1-641-88481
 2     |Bill Gates  |1-201-444444
 3     |Paul Dilon  |1-200-987456
 3     |Paul Dilon  |1-200-456987
 3     |Paul Dilon  |1-200-555555

3 个答案:

答案 0 :(得分:2)

您可以使用OR

这样的事情
SELECT *
FROM Table
WHERE PhoneNumber1 = '1-201-444444'
OR PhoneNumber2 = '1-201-444444'
OR PhoneNumber3 = '1-201-444444'

或者您可以尝试类似

的内容
SELECT *
FROM Table
WHERE '1-201-444444' IN (PhoneNumber1, PhoneNumber2, PhoneNumber3)

这也应该允许你使用参数。

这样的东西
DECLARE @Number VARCHAR(50) = '1-201-444444'
SELECT *
FROM Table
WHERE @Number IN (PhoneNumber1, PhoneNumber2, PhoneNumber3)

答案 1 :(得分:1)

我认为这应该有效:

select Name from view_Phonebook where (PhoneNumber1='1-201-444444' 
or PhoneNumber2='1-201-444444' or PhoneNumber3='1-201-444444')

答案 2 :(得分:0)

试试这个:

SELECT id, Name, PhoneNumber1 AS telephone
FROM table_Phonebook
UNION
SELECT id, Name, PhoneNumber2 AS telephone
FROM table_Phonebook
UNION
SELECT id, Name, PhoneNumber3 AS telephone
FROM table_Phonebook