code

MySQL View에서 결과가 없을 때 값을 반환하려면 어떻게 해야 합니까?

starcafe 2023. 6. 7. 23:02
반응형

MySQL View에서 결과가 없을 때 값을 반환하려면 어떻게 해야 합니까?

다음 보기에서 생성된 일부 MySQL 레코드가 있습니다.

+---------+-----------------------------+------------+
| user_id | meta_key                    | meta_value |
+---------+-----------------------------+------------+
|       2 | admin-first-timer-training  | NULL       |
|       2 | admin-first-timer-overnight | No         |
|       2 | admin-first-timer-outdoor   | No         |
+---------+-----------------------------+------------+

기록을 갖고 싶습니다.

+---------+-----------------------------+------------+
| user_id | meta_key                    | meta_value |
+---------+-----------------------------+------------+
|       2 | admin-first-timer-training  | Yes        |
|       2 | admin-first-timer-overnight | No         |
|       2 | admin-first-timer-outdoor   | No         |
+---------+-----------------------------+------------+

현재 다음 보기를 사용하여 다음 레코드를 생성하고 있습니다.

create VIEW `wp_record_db` AS 
select distinct `u`.`ID` AS `id`,
    (select distinct (
        CASE WHEN `wp_usermeta`.`meta_value`="No" THEN "No" 
              ELSE "Yes" END) 
    from `wp_usermeta` 
    where `wp_usermeta`.`user_id` = `u`.`ID` and `wp_usermeta`.`meta_key` in ('admin-first-timer-outside','admin-first-timer-outdoors','admin-first-timer-outdoor') 
    limit 1) AS `admin-first-timer-outdoor`,
    (select distinct (
        CASE WHEN `wp_usermeta`.`meta_value`="No" THEN "No" 
             WHEN `wp_usermeta`.`meta_value` IS NULL THEN "YES" 
             ELSE "Yes" END) 
    from `wp_usermeta` where `wp_usermeta`.`user_id` = `u`.`ID` and `wp_usermeta`.`meta_key` = 'admin-first-timer-training' 
    limit 1) AS `admin-first-timer-training`,
    (select distinct (
        CASE WHEN `wp_usermeta`.`meta_value`="No" THEN "No" 
             ELSE "Yes" END) 
    from `wp_usermeta` 
    where `wp_usermeta`.`user_id` = `u`.`ID` and `wp_usermeta`.`meta_key` = 'admin-first-timer-overnight' 
    limit 1) AS `admin-first-timer-overnight` 
from `wp_users` `u`;

에서 보는 바와 같이

(select distinct (CASE WHEN `wp_usermeta`.`meta_value`="No" THEN "No" WHEN `wp_usermeta`.`meta_value` IS NULL THEN "YES" ELSE "Yes" END) from `wp_usermeta` where `wp_usermeta`.`user_id` = `u`.`ID` and `wp_usermeta`.`meta_key` = 'admin-first-timer-training' limit 1) AS `admin-first-timer-training`,

케이스 문을 사용하여 NULL인지 테스트해 보았지만 원하는 결과를 제공하지 못했습니다.

SELECT IFNULL((select `wp_usermeta`.`meta_value` from `wp_usermeta` where `wp_usermeta`.`user_id` = 2 and `wp_usermeta`.`meta_key` = 'admin-first-timer-training'), "Yes");

원하는 리턴 출력을 생성하는 것처럼 보이지만 케이스 문에서 작동할 수는 없습니다. 하지만 삽입하려고 해도 항상 빈 문이 반환됩니다.

무엇을 시도해 볼 수 있습니까?

조건부 집계를 사용하여 쿼리 미터를 보다 쉽게 읽을 수 있도록 할 수 있습니다.

그렇지만NULL항상 아니요와 다를 것이므로 추가 확인이 필요하지 않습니다.NULL

SELECT
    `user_id`,
    MIN(CASE WHEN `meta_key` = 'admin-first-timer-training' AND `meta_value` = 'No' THEn 'No' ELSE 'Yes' END) as 'admin-first-timer-training',
    MIN(CASE WHEN `meta_key` = 'admin-first-timer-overnight' AND `meta_value` = 'No' THEn 'No' ELSE 'Yes' END) as 'admin-first-timer-overnight',
   MIN(CASE WHEN `meta_key` = 'admin-first-timer-outdoor' AND `meta_value` = 'No' THEn 'No' ELSE 'Yes'  END) as 'admin-first-timer-outdoor'
FROM wp_usermeta
GROUP BY user_id
user_id | admin-first-timer-training | admin-first-timer-timer | admin-first-timer-timer-tim------: | :------------------------- | :-------------------------- | :------------------------2 | 예 | 아니요 | 아니요

db<>여기로 이동

언급URL : https://stackoverflow.com/questions/73255939/how-can-i-return-a-a-value-on-no-result-in-a-mysql-view

반응형