2013-03-19 63 views
2

我有這個疑問MySQL的條件選擇基於查詢的WHERE子句

SELECT column1 FROM Table1 WHERE column1 LIKE CONCAT('%', :regex, '%') OR (column2 IS NOT NULL AND column2 LIKE CONCAT('%', :regex, '%') 

返回總是column1值如果Table1滿足創紀錄的where子句。但我想要的是,如果滿足where子句的第一部分LIKE CONCAT('%', :regex, '%'),則返回column1值,如果滿足第二部分(column2 IS NOT NULL AND column2 LIKE CONCAT('%', :regex, '%'),則返回column2值。 我應該如何修改查詢來實現這個結果?

回答

3

一種選擇是使用CASE聲明:

SELECT 
    CASE 
     WHEN column1 LIKE CONCAT('%', :regex, '%') THEN column1 
     ELSE column2 
    END yourcolumn 
FROM Table1 
WHERE column1 LIKE CONCAT('%', :regex, '%') 
    OR (column2 IS NOT NULL AND column2 LIKE CONCAT('%', :regex, '%') 
+0

大,查詢的工作原理是我想要的。但是我還有一個問題與你的答案有關:在你的查詢中,相同的比較會執行兩次,一次是選擇,另一次是在哪裏。只有兩種之一可以優化查詢嗎? – LuckyStarr 2013-03-20 09:20:24