mysql select语句中的回退条件

mysql select语句中的回退条件,mysql,Mysql,我想在MySql语句中加入一个条件。如果可能的话 这是我当前的mysql select语句 SELECT * FROM `validproduct` WHERE `visible` = 1 AND `typeid` = 2 AND `sizeid` = 3 GROUP BY `productid` 因此,目前,我选择的产品是sizeid=3。我要做的是选择size=1的产品,如果不存在,则选择sizeid=3 My validprod

我想在MySql语句中加入一个条件。如果可能的话

这是我当前的mysql select语句

SELECT *
      FROM `validproduct`
      WHERE `visible` = 1
      AND `typeid` = 2
      AND `sizeid` = 3
      GROUP BY `productid`
因此,目前,我选择的产品是sizeid=3。我要做的是选择size=1的产品,如果不存在,则选择sizeid=3

My validproducts表包含一个产品列表,其中最多有6种不同大小的产品与之关联(这些产品又有不同的定价)。我想返回我所有的产品,最低的sizeid(也将有该产品的最低价格)。并非所有产品都有sizeid 1


因此,我的返回数据将类似于产品A(sizeid 1,$x);产品B(尺寸3,$y)等

有点奇怪,但我想

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 |
+---+

以下是一种方法:

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。加入这两个团队,你就能得到你想要的


如果不存在带有
sizeid=1
的行,您想选择
sizeid=3
?根据您的问题,您似乎想在sql查询中使用if条件,这是不可能的…@AswinMurugesh这是可能的,只是不通过
if/ELSE
逻辑…从已删除的答案:hmm.我的validproduct表有许多产品,每个productid都有一个以上的大小。所以我想退回所有的产品,但每个产品都有最低的可用尺寸。因此,一些产品的sizeid为1,而另一些产品的sizeid为3。这会不会返回我的完整产品列表,每一条生产线都有最低的尺寸ID?这是一个完全不同的问题。你最好在上面的问题中澄清一下,我将删除这个。如果我有时间,我会尝试重做。上面的内容将返回所有1号或3号尺码。