【问题标题】:select case when in MYSQL在 MYSQL 中选择大小写
【发布时间】:2021-04-26 10:33:02
【问题描述】:

我有两张桌子

第一个表名是“consumer”

id_consumer name
1 Roy
2 Dori
3 Rico

第二个表名是“consumer_address”

id_consumer address status
1 Street Avenue 1
1 Park Hill 0
2 Highwalk Street 1
2 Albion Place 0

条件

  1. “消费者”表中的名称
  2. 地址来自“consumer_address”,但是当consumer_address.status = 1时我只想获得1个地址
  3. 当Consumer在table“consumer_address”中没有数据时,字段为NULL

像这样的最终标签

id_consumer name address status
1 Roy Street Avenue 1
2 Dori Highwalk Street 1
3 Rico NULL NULL

我有查询,但它不起作用 这是我的查询

选择 id_consumer, 姓名, CASE WHEN (`consumer_address`.`status` = 1) THEN `consumer_address`.`address` ELSE NULL END as "Address", CASE WHEN (`consumer_address`.`status` = 1) THEN `consumer_address`.`status` ELSE NULL END as "Status" 来自消费者 加入 consumer_address on consumer_address.id_consumer = consumer.id_consumer

谢谢

【问题讨论】:

  • 客户是否可以拥有多个地址。状态 1?
  • 不,消费者只能拥有 1 个状态为 1 的地址

标签: mysql


【解决方案1】:

非常简单的解决方案:

SELECT 
    `id_consumer`, 
    `name`,
    `consumer_address`.`address`,
    `consumer_address`.`status`
FROM consumer
LEFT JOIN consumer_address ON 
    `consumer_address`.`id_consumer` = `consumer`.`id_consumer` AND
    `consumer_address`.`status` = 1

【讨论】:

    【解决方案2】:

    不要使用 CASE WHEN,只需在 JOIN 中包含状态。

    此外,要保留消费者 3,您需要 LEFT JOIN。

    SELECT 
        id_consumer, 
        name,
        `consumer_address`.`address`,
        `consumer_address`.`status`
    FROM
        consumer
    LEFT JOIN
        consumer_address
            ON  consumer_address.id_consumer = consumer.id_consumer
            AND consumer_address.status = 1
    

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2019-04-03
      • 2019-01-31
      • 1970-01-01
      相关资源
      最近更新 更多