2013-12-12 2 views
0

SELECT CASE로 SQL을 작성해야하는데, 내부 SELECT가 둘 ​​이상의 요소를 리턴하는 경우, 전체 SELECT를 실행해야합니다. 그렇지 않으면 빈 문자열을 리턴해야합니다. 내가 필요로하는 최적화 어떤 종류의 번 결과를 검색 한 번, 카운트를 할 두 번 내부 SELECT 쿼리를 실행하지 않기 위해,내부 SELECT가있는 SELECT CASE

SELECT CASE 
    WHEN (SELECT COUNT (DISTINCT obj.param1 WHERE...) 
      from table1) > 1 THEN '' 
    ELSE SELECT * from table2 
    where obj2.param1 = (SELECT DISTINCT obj.param1 from table1 WHERE...) 

입니다 : 작동하는 코드는 다음과 같이 (의역)입니다 상위 SELECT 쿼리에 필요합니다. 이것이 가능한가?

+0

IMHO, 불가능, 사용자 검색어에 대한 접근 방식을 변경해야합니다. –

+0

어떤 데이터베이스입니까? SQL Server? 신탁? MySql? –

+0

이것은 내 마음에 오는 유일한 접근 방법이지만, 어떤 제안도 환영합니다. 그것은 SELECT CASE와 함께 할 필요는 없지만, 최적화되어 있다면, 함께 살 수 있습니다. @ 스탠리, 데이터베이스 Postgres입니다 –

답변

1

대신이 같은 작업을 수행하고 행이 반환되지 않으면 빈 문자열을 반환하는 대신 감지하거나 더 큰 select 문의 일부로 사용합니까?

SELECT * 
FROM table2 
WHERE obj2.param1 IN (
    SELECT obj1.param1 
    FROM table1 
    WHERE... 
    GROUP BY obj1.param1 
    HAVING COUNT(*) = 1 
) 
+0

쿼리가 더 큰 부분입니다. select 문을 사용하지만 초기 결과는 코드 조각이 내가 필요한 것임을 보여줍니다. 감사. –