728x90

먹보고릴라님 | 쿼리 | 2013-10-11 18:17:22




먹보고릴라 2013-10-11 18:17:55

SELECT serialno AS AgentID, computername, IPADDR, MACADDR,
(
SELECT H.HWValue FROM avwNodeHW H, avwNode N1
WHERE N.nodeID = N1.nodeID and N1.NodeID = H.nodeID and
H.HWBaseID = (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName = 'cpuNameDetail')
) AS CPU,
(
SELECT H.HWValue FROM avwNodeHW H, avwNode N1
WHERE N.nodeID = N1.nodeID and N1.NodeID = H.nodeID and
H.HWBaseID = (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName = 'mainMemory')
) AS Memory,
(
SELECT H.HWValue FROM avwNodeHW H, avwNode N1
WHERE N.nodeID = N1.nodeID and N1.NodeID = H.nodeID and
H.HWBaseID = (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName = 'hdd1Size')
) AS HDD1,
(
SELECT H.HWValue FROM avwNodeHW H, avwNode N1
WHERE N.nodeID = N1.nodeID and N1.NodeID = H.nodeID and
H.HWBaseID = (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName = 'hdd2Size')
)AS HDD2
FROM avwNodeDetail N JOIN ATBNODE M on N.NODEID=M.NODEID


DB2 SQLDBX에서 사용 하며
에러 메시지는 
SQL0811N 스칼라 fullselect, SELECT INTO문 또는 VALUES INTO문의 결과가 두 행 이상입니다. SQLSTATE=21000
이러하게 에러 메시지가 출력 됩니다

이부분에 있어 어떻게 하는 방법이 있을까요?


먹보고릴라 2013-10-11 22:05:01
SELECT M.serialno AS AgentID, computername, IPADDR, MACADDR, H.HWValue AS CPU, H.HWValue AS MEMORY, 
H.HWValue AS HDD1, H.HWValue AS HDD2 
FROM avwNodeHW H, avwNode N1, avwNodeDetail N JOIN ATBNODE M on N.NODEID=M.NODEID
WHERE N.nodeID = N1.nodeID and N1.NodeID = H.nodeID and
H.HWBaseID in (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName in ('cpuNameDetail','mainMemory'))

이렇게 수정하니 mainmemory에 cpu 이름이 같이 나와버리네요.. 
혹시 아시는 부분 있으시나용?

pajama 2013-10-11 22:14:24
안녕하세요

두가지를 확인해보시기 바랍니다.

1. 조건절에서 HWBaseID 컬럼에 아래와 같이 값을 취하는 부분이 있습니다.
H.HWBaseID = (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName = '...
'=' 이기 때문에 SELECT 하는 결과 레코드가 한개 이상이면 sql0811n 오류가 발생합니다.

2. 그리고 CPU, Memory, HDD1, HDD2 컬럼값을 가져오는 스칼라서브쿼리(SELECT H.HWValue ...) 결과 레코드가 하나 이상일때도 오류가 발생합니다.

pajama 2013-10-11 22:24:20
댓글 다는 사이에 댓글을 달아주셨네요

H.HWBaseID in (SELECT HWBaseID FROM avwHWBase WHERE HWTypeName in ('cpuNameDetail','mainMemory'))
HWBaseID 컬럼에 cpu memory에 해당하는 ID를 모두 가져왔고 H.HWValue가 다 같은값으로 나올텐데요


먹보고릴라 2013-10-13 20:25:55
To. pajama 님
댓글에 감사합니다. 

두번째 댓글에서 달아주신 내용과 같이 cpumemory에 대핟ㅇ하는 ID를 가져왔는데 HWValue에서 mainMemory도 가져올려 하면
group by절로 하여 사용하면 될까요?



728x90

+ Recent posts