0

我有一个带有电话簿选项的软件。也可以将此电话簿连接到数据库。

我的问题是:这个电话簿只能搜索数据库中的一个字段,但数据库中的某些数据有 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
4

3 回答 3

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)
于 2013-08-27T17:48:22.193 回答
1

我认为这应该有效:

select Name from view_Phonebook where (PhoneNumber1='1-201-444444' 
or PhoneNumber2='1-201-444444' or PhoneNumber3='1-201-444444')
于 2013-08-27T17:48:04.473 回答
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
于 2013-08-28T10:40:47.900 回答