2013-04-15 411 views
2

我有一個這樣的查詢:SQL查詢與CONCAT LIKE和

SELECT * FROM `tbl_shop` 
WHERE 
    (LOWER (CONCAT(address, name)) LIKE (LOWER ('%boston%')) AND 
    LOWER (CONCAT(address, name)) LIKE (LOWER('%smoke%'))); 

我的問題很簡單 - 有什麼辦法怎麼寫,而不需要重複CONCAT(地址,姓名)的部分代碼?

我試圖

SELECT * FROM `tbl_shop` 
WHERE 
    (LOWER (CONCAT(address, name)) LIKE (LOWER ('%boston%')) AND (LOWER('%smoke%'))); 

但是,這並沒有給任何結果。我只需要包含兩個詞的所有結果。我無法使用全文,因爲我正在使用inno db並希望保留它。

在此先感謝。

回答

2

你可以做

SELECT b.* FROM 
(
    SELECT a.*, LOWER(CONCAT(a.address, a.name)) AS field_to_check 
)b 
WHERE b.field_to_check LIKE (LOWER ('%boston%')) 
AND b.field_to_check LIKE (LOWER('%smoke%')); 

然而,這只是語法糖,它不應該是在性能上的差異。

+0

表現對我很重要。如果沒有區別,第一種方法對我來說更具可讀性,並且可能會保留下來。感謝您的回覆! – kokoseq