database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 31347 게시물 읽기
No. 31347
쿼리하나 부탁 드립니다.
작성자
이기자(k3i2)
작성일
2021-09-04 16:32
조회수
321

여기저기 검색해보니함수를 만드는때 union all은 사용못한다는 말이 있네요.

그래서 union all을 쓰리않고 하나의 쿼리로 검색하는 쿼리를 부탁 드립니다. ㅠ.ㅠ


예를들어 세개의 테이블이 있고, 세개모두 Where code = 'aaa' 라는 조건으로 아래 처럼 결과가 나왔는데,

이걸 하나의 쿼리로 min( date1 ), max( date2 )가 나오게 가능한가요?

그래야 두 날짜사이의 일수를 반환하는 함수를 만들수가 있을거 같습니다.


아래 데이타라면, 2021-08-01 과, 20121-09-31이 조회 되어야겠지요.

세 테이블은 조화값수가 하나도 없을수있고 하나만 있을수있고 여러개가 있을수도있습니다.


-- Table1 --

   date1,            date2

-------------------------------

            결과없음


-- Table2 --

   date1,            date2

-------------------------------

2021-08-01     20121-09-21

2021-08-01     20121-08-24

2021-08-13     20121-08-25


-- Table3 --

   date1,            date2

-------------------------------

2021-08-05     20121-09-31



 

이 글에 대한 댓글이 총 7건 있습니다.
SELECT MIN(date1) date1
     , MAX(date2) date2
  FROM (SELECT date1, date2 FROM table1 WHERE code = 'aaa'
         UNION ALL
        SELECT date1, date2 FROM table2 WHERE code = 'aaa'
         UNION ALL
        SELECT date1, date2 FROM table3 WHERE code = 'aaa'
        ) a
;
SELECT MIN(date1) date1
     , MAX(date2) date2
  FROM (SELECT MIN(date1) date1, MAX(date2) date2 FROM table1 WHERE code = 'aaa'
         UNION ALL
        SELECT MIN(date1) date1, MAX(date2) date2 FROM table2 WHERE code = 'aaa'
         UNION ALL
        SELECT MIN(date1) date1, MAX(date2) date2 FROM table3 WHERE code = 'aaa'
        ) a
;
 
마농(manon94)님이 2021-09-06 10:04에 작성한 댓글입니다.
이 댓글은 2021-09-06 19:00에 마지막으로 수정되었습니다.

답변감사합니다.

근데, union을 안쓰고라고 말씀드렸는데.ㅠ.ㅠ

이기자(k3i2)님이 2021-09-06 12:32에 작성한 댓글입니다.

UNION 을 쓰지 말아야만 하는 정당한 사유가 없다면?

이 문제는 UNION 을 쓰는 것이 합당한 문제입니다.

마농(manon94)님이 2021-09-06 18:58에 작성한 댓글입니다.

함수를 만들려는데, 함수에서는 union을 허요 않더라고요.

이기자(k3i2)님이 2021-09-06 20:51에 작성한 댓글입니다.

함수에서 Union 을 허용하지 않는다?

그럴리가 없을 것 같은데요?

마농(manon94)님이 2021-09-07 09:26에 작성한 댓글입니다.

쿼리하나만 해서 생성하고 그대로 복사해서 union all만 넣고 저장하니 오류가나고 다시 걷어내고 저장하니 이상없이되고 그래요. 예시는 바로전 게시물어 있습니다.

이기자(k3i2)님이 2021-09-07 17:07에 작성한 댓글입니다.

버그인 듯 하네요.
https://bugs.mysql.com/bug.php?id=32858

SELECT LEAST   (COALESCE(a, b, c), COALESCE(b, c, a), COALESCE(c, a, b)) d1
     , GREATEST(COALESCE(x, y, z), COALESCE(y, z, x), COALESCE(z, x, y)) d2
  FROM (SELECT MIN(date1) a, MAX(date2) x FROM table1 WHERE code = 'aaa') a
     , (SELECT MIN(date1) b, MAX(date2) y FROM table2 WHERE code = 'aaa') b
     , (SELECT MIN(date1) c, MAX(date2) z FROM table3 WHERE code = 'aaa') c
;

마농(manon94)님이 2021-09-08 08:34에 작성한 댓글입니다.
이 댓글은 2021-09-08 08:35에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
31347쿼리하나 부탁 드립니다. [7]
이기자
2021-09-04
321
31346mysql function에서 union all 사용 안되나요? [3]
이기자
2021-09-03
253
31344Function 소스 보기를 금지하는 방법 [2]
이규영
2021-08-12
697
31343온라인 MySQL 테스트환경
류신
2021-07-19
1228
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.013초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다