当前位置: 首页 > 面试题库 >

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

柯曜文
2023-03-14
问题内容

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

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

例如,在制造商表中,有两个字段称为Exposure_new和Exposure_used,每个字段的值分别为1,2或3,以限制可以看到其新视频或使用过的视频的位置。

添加视频时,不会为它们分配“曝光”值,这是根据当前制造商的Exposure_new或Exposure_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

问题答案:

试试这个查询-

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


 类似资料:
  • 好的,这是一段代码。代码的功能是获取一个值并确定它是奇数还是偶数。 现在我的问题在于为什么这样做有效。我现在的看法是-- num%2返回一个值。如果num为3,则num%2=1。为什么1的值满足if条件? 我假设这是一个1和0的问题,但我尝试了与%4相同的代码,如果返回3,它仍然满足if语句。 我理解这对一些人来说可能是一个基本问题,所以我为理解这一点可能太慢而道歉。非常感谢。 谢谢你的帮助!我现

  • 问题内容: 我有一个形式的edittext,当用户将文本输入到edittext中时,我希望程序可以检测到哪种语言插入了edittext。 有没有办法确定字符串是英语还是波斯语? 我找到了这个阿拉伯语代码 但是如何更改波斯语的此代码? 问题答案: 波斯语(也适用于乌尔都语)字母的所有可能的Unicode范围: 0x0600至0x06FF 0xFB50至0xFDFF 0xFE70至0xFEFF 因此,

  • 问题内容: 我正在使用.net Web API来获取json并将其返回给前端以获取角度。json可以是对象或数组。我的代码当前仅适用于数组,而不适用于对象。我需要找到一种方法来尝试解析或确定内容是否是对象或数组。 这是我的代码 以上可能不是最好的方法。它就是我现在所在的位置。 问题答案: 使用Json.NET,您可以这样做:

  • 问题内容: 我想针对AJAX请求与常规请求以不同的方式处理错误。 如何在Struts2操作中确定请求是否为AJAX? 问题答案: 您应该检查请求标头是否存在并且等于。 请注意,并非所有AJAX请求都具有此标头,例如,请求不发送该标头。如果您是使用(或使用任何其他新的AJAX框架)生成AJAX调用,则该文件就在那里。 您可以使用… 检查它是否存在,例如,当您对Stack Overflow投票时;)

  • 问题内容: 有没有办法确定字符串是英语还是阿拉伯语? 问题答案: 这是我刚刚尝试过的简单逻辑: 当且仅当在文本中找到阿拉伯语unicode代码点时,它才将文本声明为阿拉伯语。您可以增强此逻辑,使其更适合您的需求。 范围0600-06E0是阿拉伯字符和符号的代码点范围(请参见Unicode表)

  • 问题内容: 我正在使用vb.net和Access 2010作为数据库(.accdb) 这适用于MySQL: 但是,当将相同的查询传递给Access时,出现以下错误: 因此,我假设CASE语句的访问权限不同,或者访问是否完全具有该功能? PS is_enable为布尔值 问题答案: 弄清楚了: Access 2010没有CASE功能,我们改用SWITCH。 感谢