2016-10-19 3 views
-2

쿼리를 실행할 때 다음 오류가 발생합니다.오류 : EXIST 예약어를 사용하지 않고 둘 이상의 필드를 반환 할 수있는 하위 쿼리를 작성했습니다.

You have written a subquery that can return more that one field without using the EXIST reserved word in the main query's FROM clause. Revise the SELECT statement of the subquery to request only one field.

이 내 선택 성명 :

sql = "SELECT (SELECT * FROM Data WHERE ProductDate = '" + yesterday + "' "+"AND EndTime > '" + endTime + "'), " + "(SELECT * FROM Data WHERE ProductDate = '" + todayDate + "' " + "AND EndTime = '" + endTime + "')"; 

목적은 하나 개의 쿼리로 모두 선택 문을 쿼리하는 것입니다. 어떻게하면됩니까?

+1

조인 또는 유니온 모두. – jarlh

+0

'JOIN' 연산자 사용 –

+1

합집합 또는 합집합 사용 –

답변

3

당신은 UNION 사용할 수 있습니다

sql = "SELECT * FROM (" 
    + " SELECT * FROM Data WHERE ProductDate = '" + yesterday + "' AND EndTime > '" + endTime + "' " 
    + " UNION" 
    + " SELECT * FROM Data WHERE ProductDate = '" + todayDate + "' AND EndTime = '" + endTime + "' " 
    + ")"; 

또는 더 나은, 두 개의 OR-ED 조건에 WHERE와 짧고 간단 :

sql = "SELECT * FROM Data " 
    + "WHERE (ProductDate = '" + yesterday + "' AND EndTime > '" + endTime + "')" 
    + "OR (ProductDate = '" + todayDate + "' AND EndTime = '" + endTime + "')"; 

그리고 다른 사람과 같은

말한이 : 매개 변수가있는 쿼리 조사, 조만간 값 중 하나에 모든 종류의 공포가 주입 될 수 있기 때문입니다. 예 : 그 대답은 https://stackoverflow.com/a/7505842/1220550입니다.

마지막으로 한 가지 : endTime의 사용은 두 날짜와 결합 된 것처럼 이상하게 보입니다. 그러나 그것은 당신이 알고 있거나 결정할 문제이며,이 문제의 주제는 아닙니다.