2013-05-13 77 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 | 
+---+