2011-05-26 71 views
1

我有麻煩與此select語句:如何在mysql select語句中使用OR LIKE?

Select * from table where row != '' and row2 like '%test%' or like '%test2%'; 

的「或類似的」部分不工作,我猜我使用它不正確。

+0

嘿戴夫我編輯了你的問題的PHP和編程語言標籤,因爲它只是關於MySQL。 – yannis 2011-05-26 20:21:23

回答

7

你會做這樣的事情:

SELECT * FROM table 
WHERE row != '' AND (row2 like '%test%' OR row2 like '%test2%') 

每個或/與在一件事情上進行操作。正如其他人所指出的那樣,操作順序很重要。您應該使用()對錶達式進行分組,以便首先對其進行評估。

+0

謝謝vcsjones,作品 – Dave 2011-05-26 19:33:34

+0

但他的問題有一個缺失的條件?我正在談論'row!='''條件。 – RRStoyanov 2011-05-26 19:36:23

+0

@RRStoyanov這只是一個如何在同一列上做兩個喜歡的例子。我會更新答案以包含'row!='''條件。 – vcsjones 2011-05-26 19:38:29

0

Where子句與您正在查詢的表中某行的列關聯,而不是「行」本身。所以,如果處理一個簡單的客戶表,您可以應用之類的查詢像

select 
     lastname, 
     firstname, 
     address 
    from 
     customers 
    where 
     firstname like 'Bill%' 
     OR lastname like '%mar%' 

將返回其中第一個名字會專門與「條例」啓動任何名字,無論是什麼結尾(通過「% 「通配符)

OR

姓氏的值爲‘三月’中的最後名稱的任何地方,如‘馬庫斯’,‘塔瑪拉’,‘奧馬爾’......

每個」 LIKE 「適用的條款是基於你有興趣再次比較的專欄牛逼....如果你想爲你每次都要寫一列測試多個值...

where 
    firstname like 'Bill%' 
    or firstname like 'John%' 
    or firstname like '%any%' 
1

你錯過第二個像「2行」,而且您的查詢像現在工作這樣

Select * from table where row != '' and row2 like '%test%'; 
Select * from table where row2 like '%test2%'; 

如果你需要它這樣的,這是確定的,但我想你想在這兩個搜索行的!=「」?

如果是這樣的話,比你的查詢應該是這樣的:

Select * from table where row != '' and (row2 like '%test%' or row2 like '%test2%'); 

通知括號。

1

有一個運算符優先級的問題 - 使用括號來解決這個問題:

SELECT * 
    FROM table 
WHERE row != '' 
    AND (row2 LIKE '%test%' OR row2 LIKE '%test2%'); 

你也缺少在邏輯與的條件,第二個「2行」。

當然,示例中的第二個LIKE條件不會返回第一個沒有的行(因爲包含'test2'的每一行也包含'test'),但我們可以認爲這是過度簡化爲了這個問題的目的。