【问题标题】:mysql conditional queriesmysql条件查询
【发布时间】:2011-11-16 01:27:41
【问题描述】:

我在 mysql 数据库中有 3 个表,名称为 Visits、Groups、Carers。 访问可以由小组或护理人员执行,因此在访问表中我有一个现场护理人员模式,如果访问由护理人员执行,则设置为 1,如果由小组执行,则设置为 0。

我需要构建一个语句来检索组名称或护理人员名称(取决于 carer_mode 的值)

我意识到下面的代码不正确,但它可能有助于解释我试图实现的逻辑:

SELECT CASE carer_mode
WHEN  '1' THEN (SELECT name FROM carers WHERE Carers.id = Visits.carer_id )
WHEN '0' THEN (SELECT name FROM groups WHERE Groups.id = Visits.carer_id )
END as carer_name
FROM `Visits`

如果对有效代码有任何帮助,我将不胜感激,以帮助我实现目标

谢谢

凯文

【问题讨论】:

  • 为什么你认为你提供的代码是错误的?
  • @Icarus:是的,忽略了别的东西。 ;)

标签: mysql case conditional-statements


【解决方案1】:

您的代码看起来不错。这是实现相同结果的另一种方法:

    SELECT g.name
    FROM 
        Visits AS v
      JOIN
        Groups AS g
          ON g.id = v.carer_id
    WHERE v.carer_mode = 0
UNION ALL
    SELECT c.name
    FROM 
        Visits AS v
      JOIN
        Carers AS c
          ON c.id = v.carer_id
    WHERE v.carer_mode = 1

【讨论】:

  • 我真是个笨蛋……!我的代码只是想弄清楚逻辑并在 SQL 语句中表示它,我什至从未检查过它是否有效,它确实有效!您的答案被接受以发现这一点并添加替代方法。谢谢
  • @Karolis 应该首先获得发现它的记录。
  • 他的回答是评论的形式,所以我不能接受。我投了赞成票。
【解决方案2】:

我认为这会奏效:

  select 
  case carer_mode when '1' then c.name 
  else g.name end as carer_name 
  from Carer c 
  left join Visits v on v.carer_id=c.carer_id 
  left join Groups g on g.carer_id=c.carer_id 

【讨论】:

  • 为了让您获得信用,您非常接近,但需要将访问作为主要来源,并且护理人员是您的左加入...两者都由 VISIT.Carer_ID 加入
猜你喜欢
  • 1970-01-01
  • 2013-05-09
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2011-08-10
  • 2012-10-30
  • 2017-03-21
相关资源
最近更新 更多