首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL select语句with CASE还是IF ELSEIF?不确定如何获得结果

MySQL select语句with CASE还是IF ELSEIF?不确定如何获得结果
EN

Stack Overflow用户
提问于 2011-12-22 15:31:38
回答 3查看 359.6K关注 0票数 90

我有两张桌子。一个有制造商信息,并包括他们可以销售的地区。另一家则在出售他们的产品。我们必须根据区域限制产品的可见性。这就像Netflix的系统中有视频,只能在任何地方观看(1),只能在加拿大观看(2),只能在美国观看(3)。

我正在尝试执行一个查询,该查询根据制造商表中的设置告诉我可以在何处查看产品。

例如,在制造商表中,有两个名为expose_new和expose_used的字段,每个字段的值都是1、2或3,以限制在哪里可以看到他们的新视频或旧视频。

当视频被添加时,它们不会被分配一个'expose‘值,这意味着在将它们添加到我们的索引中时,这是根据当前制造商的expose_new或expose_used值动态完成的。

我想要获取的是物品的详细信息和计算值,根据它是新的还是用过的,以及分配给制造商的所有新产品或旧产品的规则/值,可以看到它的位置。我需要每个产品的单个数字,以便有条件地在列表中显示它。

下面的方法不起作用,但是你会明白我想要做什么。我尝试过使用CASE语句和下面错误的IF/ELSEIF语句。

任何帮助调试这一点,并为我指出正确的方向,将不胜感激。

代码语言:javascript
复制
SELECT 
t2.company_name,
t2.expose_new,  // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status,  //can be new or used
(SELECT 
IF(status ='New',
  (select expose_new from manufacturers where id = t1.seller),1
)
ELSEIF(t1.status ='Used',
  (select expose_used from manufacturers where id = t1.seller),1
)
END IF
) as 'expose'
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238

下面是一个CASE版本,它看起来是实际执行的,但无论发生什么情况都会得到第一个值(在本例中是1)。我不确定是否可以在每个WHEN语句中添加带有和的另一个测试,但它不会给出错误,只会给出错误的结果。

代码语言:javascript
复制
SELECT 
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.status,
 CASE status
   when 'New' and t2.expose_new = 1 then 1
   when 'New' and t2.expose_new = 2 then 2
   when 'New' and t2.expose_new = 3 then 3
   when 'Used' and t2.expose_used = 1 then 1
   when 'Used' and t2.expose_used = 2 then 2
   when 'Used' and t2.expose_used = 3 then 3
END as expose
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-22 15:52:55

尝试这个查询-

代码语言:javascript
复制
SELECT 
  t2.company_name,
  t2.expose_new,
  t2.expose_used,
  t1.title,
  t1.seller,
  t1.status,
  CASE status
      WHEN 'New' THEN t2.expose_new
      WHEN 'Used' THEN t2.expose_used
      ELSE NULL
  END as 'expose'
FROM
  `products` t1
JOIN manufacturers t2
  ON
    t2.id = t1.seller
WHERE
  t1.seller = 4238
票数 154
EN

Stack Overflow用户

发布于 2017-02-22 23:46:30

语法:

代码语言:javascript
复制
CASE value WHEN [compare_value] THEN result 
[WHEN [compare_value] THEN result ...] 
[ELSE result] 
END

替代方案: CASE WHEN条件THEN result [WHEN条件THEN result ...]

代码语言:javascript
复制
mysql> SELECT CASE  WHEN 2>3 THEN 'this is true' ELSE 'this is false' END; 
+-------------------------------------------------------------+
| CASE  WHEN 2>3 THEN 'this is true' ELSE 'this is false' END |
+-------------------------------------------------------------+
| this is false                                               | 
+-------------------------------------------------------------+

我正在使用的

代码语言:javascript
复制
SELECT  act.*,
    CASE 
        WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NULL) THEN lises.location_id
        WHEN (lises.session_date IS NULL AND ses.session_date IS NOT NULL) THEN ses.location_id
        WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date>ses.session_date) THEN ses.location_id
        WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date<ses.session_date) THEN lises.location_id
    END AS location_id
FROM activity AS act
LEFT JOIN li_sessions AS lises ON lises.activity_id = act.id AND  lises.session_date >= now()
LEFT JOIN session AS ses ON  ses.activity_id = act.id AND  ses.session_date >= now()
WHERE act.id
票数 25
EN

Stack Overflow用户

发布于 2018-12-27 19:34:04

另一种方法是使用嵌套的IF语句。假设您有companies表,并且想要计算其中的记录数。示例查询如下所示

代码语言:javascript
复制
SELECT IF(
      count(*) > 15,
      'good',
      IF(
          count(*) > 10,
          'average',
          'poor'
        ) 
      ) as data_count 
      FROM companies

这里,第二个IF条件在第一个IF条件失败时起作用。所以IF语句的语法示例应该是IF ( CONDITION,THEN,ELSE)。希望这能帮助到别人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8600671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档