이번 주에 어떤 학생이 앱에 로그인했는지 찾는 쿼리를 작성했습니다. 내 SQLite 쿼리는 다음과 같습니다.SQL 쿼리가 하위 쿼리와 동일한 값을 반환하지 않음 [solved]
public static final String WHOLE_QUERY = "SELECT " + DBHelperTest.USER_ID
+ " , " + DBHelperTest.FNAME + " , " + DBHelperTest.SNAME
+ " FROM " + DBHelperTest.TABLE_CHILD + " WHERE "
+ DBHelperTest.USER_ID + " = (SELECT " + DBHelperTest.USER_ID
+ " FROM " + DBHelperTest.TABLE_SESSION_DATA + " WHERE "
+ DBHelperTest.WEEK_OF_YEAR_SIGNED_IN + " = " + theWeek() + " AND "
+ DBHelperTest.YEAR_SIGNED_IN + " = " + theYear() + ") " + " AND "
+ DBHelperTest.USER_ID + " = (" + "SELECT "
+ DBHelperTest.Child_USER_ID + " FROM " + DBHelperTest.TABLE_CLASS
+ " WHERE " + DBHelperTest.Teacher_USER_ID + " = (SELECT "
+ DBHelperTest.USER_ID + " FROM " + DBHelperTest.TABLE_SESSION_DATA
+ " WHERE " + DBHelperTest.SESSION_ID + " = (SELECT MAX("
+ DBHelperTest.SESSION_ID + ") FROM "
+ DBHelperTest.TABLE_SESSION_DATA + ")))";
아무 것도 반환하지 않습니다. 나는 두 개의 질의 ...
으로 분할 그러나 경우 먼저이 쿼리는 이번 주에 로그인 한 모든 사용자를 보여줍니다
public static final String LOGGED_IN_THIS_WEEK_QUERY = "SELECT "
+ DBHelperTest.USER_ID + " , " + DBHelperTest.FNAME + " , "
+ DBHelperTest.SNAME + " FROM " + DBHelperTest.TABLE_CHILD
+ " WHERE " + DBHelperTest.USER_ID + " = (SELECT "
+ DBHelperTest.USER_ID + " FROM " + DBHelperTest.TABLE_SESSION_DATA
+ " WHERE " + DBHelperTest.WEEK_OF_YEAR_SIGNED_IN + " = "
+ theWeek() + " AND " + DBHelperTest.YEAR_SIGNED_IN + " = "
+ theYear() + ") ";
이 쿼리 userId를 "Jasm"을 사용자에게 출력합니다.
public static final String CHILD_WITH_SAME_TEACHER_QUERY = "SELECT "
+ DBHelperTest.Child_USER_ID + " FROM " + DBHelperTest.TABLE_CLASS
+ " WHERE " + DBHelperTest.Teacher_USER_ID + " = (SELECT "
+ DBHelperTest.USER_ID + " FROM " + DBHelperTest.TABLE_SESSION_DATA
+ " WHERE " + DBHelperTest.SESSION_ID + " = (SELECT MAX("
+ DBHelperTest.SESSION_ID + ") FROM "
+ DBHelperTest.TABLE_SESSION_DATA + "))";
이 쿼리 userId를의 "Jasm"와 "thup"사용자에게 출력 :
는 두 번째로이 쿼리는 주어진 교사와 관련된 모든 사용자를 보여줍니다.왜이 사용자가 두 기준을 모두 충족하므로 내 원래 쿼리가 "Jasm"의 세부 정보를 출력하지 않습니다.
더 쉽게 읽을 버전은 아래를 참조하십시오
전체 쿼리
SELECT USER_ID , FNAME , SNAME
FROM TABLE_CHILD
WHERE USER_ID =
(
SELECT USER_ID
FROM TABLE_SESSION_DATA
WHERE WEEK_OF_YEAR_SIGNED_IN = theWeek()
AND YEAR_SIGNED_IN = theYear()
)
AND USER_ID =
(
SELECT Child_USER_ID
FROM TABLE_CLASS
WHERE Teacher_USER_ID =
(
SELECT USER_ID
FROM TABLE_SESSION_DATA
WHERE SESSION_ID =
(
SELECT MAX(SESSION_ID)
FROM TABLE_SESSION_DATA)))
상반기
SELECT Child_USER_ID
FROM TABLE_CLASS
WHERE Teacher_USER_ID =
(
SELECT USER_ID
FROM TABLE_SESSION_DATA
WHERE SESSION_ID =
(
SELECT MAX(SESSION_ID)
FROM TABLE_SESSION_DATA))
문자열을 생성하는 코드 대신 * after * 대체 문자열 값을 입력하면 질문을 이해하는 것이 훨씬 더 쉬울 것입니다. 귀하의 코드는 읽기가 매우 어렵습니다. –
귀하의 의견을 주셔서 감사합니다, 내가 이렇게 한 이유는 내 코드의 모든 오류가 정확하게 기록되었는지 확인하는 것입니다. 그러나 나는이 코멘트를 기꺼이 받아 들일 것이고 더 읽기 쉬운 형식으로 코드를 추가 할 것이다. 나는 당신이 더 비슷한 것을 원한다고 생각한다 : SELECT userId, fName, sName FROM table_child ..? –
데이터베이스가 실제로 실행중인 코드를 포함해야합니다. 문제는 SQL 쿼리의 결과와 관련이있는 것 같습니다. 그것이 당신이 집중해야하는 것입니다. 그 질문이 어떻게 쓰여지는 것은 당신의 질문에 대답하는 것과는 무관합니다. –