2013-05-13 68 views
3

我想將條件放入MySql語句中。如果這甚至是可能的?mysql select語句中的後備條件

這是我目前的MySQL SELECT語句

SELECT * 
     FROM `validproduct` 
     WHERE `visible` = 1 
     AND `typeid` = 2 
     AND `sizeid` = 3 
     GROUP BY `productid` 

所以此刻,我選擇產品sizeid = 3。我想要做的就是選擇產品尺寸= 1,如果這沒有按不存在,那麼請選擇sizeid = 3.

我的有效產品表包含與其關聯的多達6種不同尺寸的產品列表(反過來,它們具有不同的定價)。我想要返回我的所有產品,並且尺寸最小(這也將具有該產品的最低價格)。不是所有的產品都有一個大小爲1.因此,我的返回數據將類似於產品A(sizeid 1,$ x);產品B(sizeid 3,$ Y)等

+0

要選擇'sizeid = 3'如果與'sizeid = 1'存在_No rows_? – 2013-05-13 00:01:51

+0

根據你的問題,似乎你想在一個SQL查詢中使用if條件,這是不可能的... – 2013-05-13 00:04:49

+0

@AswinMurugesh這是可能的,只是不通過IF/ELSE邏輯... – 2013-05-13 00:05:21

回答

1

這裏是一個辦法做到這一點:

SELECT 
    vp1.* 
FROM 
    validproduct vp1 
INNER JOIN 
    (
    SELECT 
     productid, MIN(sizeid) as minsize 
    FROM 
     validproduct 
    WHERE 
     visible = TRUE AND 
     typeid = 2 
    GROUP BY 
    productid 
) AS vp2 
ON 
    vp1.productid = vp2.productid AND 
    vp1.sizeid = vp2.minsize AND 
    vp1.visible = TRUE AND 
    vp1.typeid = 2 
GROUP BY 
    vp1.productid; 

說明:

外部查詢實際上是您已有的。內部子查詢查找每個產品的最小sizeid。通過加入這兩個你得到你想要的。

PLZ SEE THE FIDDLE

0

這是一個有點怪異,但沒關係,我想......

SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT COALESCE(i2.i,i1.i)m FROM ints i1 LEFT JOIN ints i2 ON i2.i = 3 WHERE i1.i = 1; 
+------+ 
| m | 
+------+ 
| 3 | 
+------+ 

SELECT COALESCE(i2.i,i1.i)m FROM ints i1 LEFT JOIN ints i2 ON i2.i = 11 WHERE i1.i = 1; 
+------+ 
| m | 
+------+ 
| 1 | 
+------+ 

也許......

SELECT i FROM ints ORDER BY FIELD(i,1,3) DESC LIMIT 1; 
+---+ 
| i | 
+---+ 
| 3 | 
+---+