source

MySQL/MariaDB - 쿼리의 HAVING 부분 내에서 SELECT 쿼리의 필드 값을 덮어씁니다.

goodcode 2022. 9. 5. 22:56
반응형

MySQL/MariaDB - 쿼리의 HAVING 부분 내에서 SELECT 쿼리의 필드 값을 덮어씁니다.

'필드의 할 수 ?SELECT " " 에서"HAVING문의의일?일 부??데이터베이스의 데이터를 터치하고 싶지 않습니다.이것은 선택 항목에서 반환되는 값일 뿐입니다.

여기 문제의 실제 쿼리가 매우 길고 복잡하기 때문에 계획된 예가 있습니다.

SELECT t.col1, t.col2, (@all_is_ok = TRUE) as all_is_ok
FROM table t
WHERE t.col1 = 'something'
HAVING (
    (t.col2 = 1 AND t.col3 = 1)
    OR (t.col2 = 2 AND t.col3 = 2)
    OR (SET @all_is_ok = FALSE) /* If we get into this final OR in the HAVING 
                                   then I want the column all_is_ok to be set 
                                   to FALSE so that I still get the row back, 
                                   but can see that the row wasn't as expected */
)

MariaDB 10.4를 사용하고 있습니다.

그게 말이 되고 누군가가 도울 수 있기를 바랍니다.감사합니다.

모든 값이 1/2 또는 1/3인지 확인하려면 창 함수를 사용합니다.

SELECT t.col1, t.col2,
       (SUM( (t.col2 = 1 AND t.col3 = 1) OR (t.col2 = 2 AND t.col3 = 2) ) OVER () =
        COUNT(*) OVER ()
       )  as all_is_ok
FROM table t
WHERE t.col1 = 'something'

은 하다 하다에서는 수 HAVING 이렇게 SELECT입니다.

SELECT t.col1, t.col2, 
CASE
    WHEN t.col2 = 1 AND t.col3 = 1 THEN 'FINE'
    WHEN t.col2 = 2 AND t.col3 = 1 THEN 'FINE'
    ELSE 'NOT FINE'
END AS all_is_ok
FROM table t
WHERE t.col1 = 'something'

어느 쪽이든

AND all_is_ok = 'FINE'

또는

HAVING all_is_okay = 'FINE'

둘 다 효과가 있을 거라 믿지만, 아직 검증되지 않았습니다.

언급URL : https://stackoverflow.com/questions/60866013/mysql-mariadb-overwrite-field-value-in-a-select-query-from-within-having-part

반응형