SELECT * FROM ( SELECT C.* FROM ( SELECT BF.* , (SELECT COUNT(TAG) FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) CNT FROM (SELECT * FROM TBF) BF )C )C count를해보면 1000건이 나옵니다. 데이터는 아래와 같은 형식으로 나옵니다.
TEAM | HOSTNAME | STATUS | IP | OS_TYPE | CNT |
AAA | ASWESew | Linux | 0 | ||
AAA | aswwEWA2 | UNIX | 1 | ||
BBB | awDDf4 | Windows | 4 |
이 상태에서는 원하는 결과가 나오고있습니다. 그런데 여기서 추가로 가져올값이 있어 서브쿼리 추가하면 단일행 하위 질의에 2개 이상의 리턴값이 있다고 하며 조회가 안됩니다. DEPAS 테이블과 T_BF 테이블을 조인을 할수 없는 상황이어서 서브쿼리로 조회할려고 하고있습니다..(조인하면 데이터 건수가 다르다고 합니다) 추가한 서브쿼리는 SELECT * FROM ( SELECT C.* FROM ( SELECT BF.* , (SELECT COUNT(TAG) FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) CNT , (SELECT TAG FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) TAG , (SELECT SOURCEID FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) SOURCEID FROM (SELECT * FROM TBF) BF )C )C 위와 같습니다. 이 쿼리를 사용하면 일정 데이터가 나오다가 중복 건수가 있으면 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다 라는 메세지가 나오고있습니다. 여기서 TAG 컬럼에 중복 데이터가 들어있습니다. 어떻게 처리해야 할까요..
마농님 답변 감사합니다. 서브쿼리에서 MAX/MIN 추가하면 검색이 되긴하는데
아래와같이
SELECT * FROM ( SELECT C.* , (SELECT MIN(TAG) FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) TAG , (SELECT MN(SOURCEID) FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) SOURCEID FROM ( SELECT BF.* , (SELECT COUNT(TAG) FROM DEPAS WHERE UPPER(BF.HOSTNAME) IN (UPPER(TAG))) CNT FROM (SELECT * FROM TBF) BF )C )C --조건절을 넣으면 무한로딩현상이 생깁니다. WHERE C.SOURCEID IS NOT NULL