【问题标题】:MySQL select statement with CASE or IF ELSEIF? Not sure how to get the resultMySQL select语句与CASE或IF ELSEIF?不知道如何得到结果
【发布时间】:2011-12-22 07:31:38
【问题描述】:

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

我正在尝试根据制造商表中的设置进行查询,告诉我可以在哪里查看产品。

例如,在manufacturer 表中,有两个名为expose_new 和expose_used 的字段,每个字段的值都为1,2 或3,以限制可以看到新视频或旧视频的位置。

添加视频时,不会为其分配“曝光”值,这意味着在将它们添加到我们的索引时根据当前制造商的 Expose_new 或 Expose_used 值即时完成。

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

以下内容不起作用,但您会明白我正在尝试做什么。我已经用 CASE 语句和下面的 WRONG IF/ELSEIF 语句尝试了这个。

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

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 语句中添加另一个带有 AND 的测试,但它不会给出错误,只会给出错误的结果。

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

【问题讨论】:

  • Here 是 mysql 上非常好的资源 if else, case 语句。都用例子来解释。

标签: mysql select case


【解决方案1】:

试试这个查询 -

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

【讨论】:

  • 一个交叉 Q - 查询 FROM products t1, manufacturers t2 where t2.id = t1.seller and t1.seller = 4238 是否相同?这只是一个左连接,不是吗?
  • 事实证明,在实验过程中,我找到了一种使用 CASE 的方法...当 status = 'New' 和 t2.expose_new = 1 时的 CASE 然后 1 当 status = 'New' 和 t2.expose_new = 2 然后 2 等等。似乎通过简单地声明没有字段的 CASE,我可以在每个 when 语句中定义它们并且它有效。
  • expose在where条件下如何使用?
  • 亲爱的 NullPointer 你能解决我的问题吗?我可以使用案例加入不同的表格吗?像这样的东西。选择日期,名称,代码,键入 CASE WHEN type='top' INNER JOIN lam1 AS l on o.code=l.code ELSE NULL END CASE typr='reverse' INNER JOIN lam2 AS l2 on o.code=l2.code ELSE NULL END FROM order AS o
【解决方案2】:

语法:

CASE value WHEN [compare_value] THEN result 
[WHEN [compare_value] THEN result ...] 
[ELSE result] 
END

替代方案: CASE WHEN [条件] THEN 结果 [当[条件] 那么结果...]

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

我正在使用:

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

【讨论】:

    【解决方案3】:

    另一种方法是使用嵌套的 IF 语句。假设您有公司表,并且您想计算其中的记录数。示例查询将是这样的

    SELECT IF(
          count(*) > 15,
          'good',
          IF(
              count(*) > 10,
              'average',
              'poor'
            ) 
          ) as data_count 
          FROM companies
    

    当第一个 IF 条件失败时,第二个 IF 条件起作用。所以 IF 语句的示例语法是 IF ( CONDITION, THEN, ELSE)。 希望它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 2014-07-17
      • 1970-01-01
      • 2012-08-23
      • 2012-12-23
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多