SQL SELECT FROM:查询

时间:2010-01-21 16:44:23

标签: sql

我有一个包含多个地址字段的表格,例如address_line_1,address_line_2等。

有没有办法可以一次跨多个字段使用WHERE子句,而不必使用OR / AND语句?

例如:

SELECT * 
  FROM FIN_LIVE.CUSTOMER_ADDRESSES 
 WHERE SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3 = 'data'

5 个答案:

答案 0 :(得分:5)

很确定你必须使用AND / OR

但是,这可能是改变数据结构的标志。你是说有3个地址,其中任何一个都可能是123 Main Street?

在这种情况下,您可能需要将地址数据提取到单独的表中。

答案 1 :(得分:1)

不,你需要使用AND / OR。

SELECT * 
FROM FIN_LIVE.CUSTOMER_ADDRESSES 
WHERE SYS_ADDRESS_1 = 'data'
    AND SYS_ADDRESS_2 = 'data'
    AND SYS_ADDRESS_3 = 'data'

答案 2 :(得分:1)

在使用MySQL的{​​{1}}中,您可以创建MyISAM索引

FULLTEXT

并发出此查询:

CREATE FULLTEXT INDEX fx_customeraddresses_123 ON FIN_LIVE.CUSTOMER_ADDRESSES (SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3)

,它将在任何字段中返回包含单词SELECT * FROM FIN_LIVE.CUSTOMER_ADDRESSES WHERE MATCH(SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3) AGAINST ('+data') 的所有记录。

您甚至可以在没有索引的情况下查询它:

data

,但这会慢得多。

如果您要在三个字段中查找完全匹配,可以使用以下语法:

SELECT  *
FROM    FIN_LIVE.CUSTOMER_ADDRESSES
WHERE   MATCH(SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3) AGAINST ('+data' IN BOOLEAN MODE)

(适用于所有主要数据库)。

答案 3 :(得分:0)

如果您想避免多个AND语句仅输入标准,即SYS_ADDRESS_1 = 'data',则可以执行以下操作:

SELECT * 
  FROM FIN_LIVE.CUSTOMER_ADDRESSES 
 WHERE 
    SYS_ADDRESS_1 = SYS_ADDRESS_2 
    AND SYS_ADDRESS_2 = SYS_ADDRESS_3 
    AND SYS_ADDRESS_3 = 'data'

我只是在思考为什么要排除像AND运算符那样基本的东西?我认为我并不孤单!

答案 4 :(得分:0)

如果你正在寻找任何一个列匹配的行,那么你可以做这样的事情,但与简单的OR语句相比,它的效率非常低。

SELECT
     *
FROM
     Customer_Addresses
WHERE
     '|*|' + sys_address_1 + '|*|' + sys_address_2 + '|*|' + sys_address_3 + '|*|' LIKE '%|*|' + @search_string + '|*|%'

我会把它作为练习留给读者把它变成一个AND语句:)

相关问题