[SQL] IN 값에 대한 반환 기본 결과에 관계없이
SQLIN 값에 대한 반환 기본 결과에 관계없이
나는 특정 날짜 범위 사이에 온라인되어있는 모든 사용자를 유도 할 수있는 쿼리가 있습니다. 이 인해 내가 데이터를 표시하는 방법에 IN 쿼리를 통해 이루어집니다. 그러나, 나는 더 레코드가 IN 조건에 해석 된 ID 찾을 수 없습니다 경우 기본 값을 반환하고 싶습니다.
간체 검색어 :
SELECT users.Name, users.ID, SUM(users.Minutes) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
이제 위의 쿼리는 예상대로 조건을 만족하는 행에서 가져옵니다. 또한 쿼리는 ID의 조건을 충족하지 않는 IN 조건 내에서의 기본값으로 끌어 당기는 것처럼.
레코드가 반환되지 않습니다으로이 경우에 IFNULL를 사용하면 작동하지 않습니다
SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
참고 - 나는 정의 PDO 기능에이 쿼리를 구문 분석하고있다. 나는되지 MySQL의 기능을 사용하지 않는
해결법
-
==============================
1.당신은 내부 조인처럼 OnlineUseage에 조건 왼쪽이 될 조인 있습니다.
당신은 내부 조인처럼 OnlineUseage에 조건 왼쪽이 될 조인 있습니다.
절에서 더 나은 될 것입니다에 당신의 상태를 이동 :
SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUseage ON OnlineUseage.ID = users.ID and OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59' WHERE users.ID IN (332,554,5764,11,556,.........) GROUP BY users.ID,users.Name ORDER BY users.ID
-
==============================
2.당신이 LEFT를 사용하는 경우에는 ON 절에 두 번째 테이블에 조건을 넣어야 가입하세요. 에서 그들을 퍼팅 WHERE 그 열이 NULL되며 조건이 성공하지 못할 것입니다 때문에, 경기가없는 모든 행 아웃 조항 필터.
당신이 LEFT를 사용하는 경우에는 ON 절에 두 번째 테이블에 조건을 넣어야 가입하세요. 에서 그들을 퍼팅 WHERE 그 열이 NULL되며 조건이 성공하지 못할 것입니다 때문에, 경기가없는 모든 행 아웃 조항 필터.
SELECT users.Name, users.ID, IFNULL(SUM(OnlineUseage.Minutes), 0) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59' WHERE UserTable.ID IN(332,554,5764,11,556,.........) GROUP BY UserTable.ID ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
from https://stackoverflow.com/questions/47449631/return-default-result-for-in-value-regardless by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server에 대한 "LIKE"와 "IN"을 결합 [중복] (0) | 2020.03.18 |
---|---|
[SQL] 변수를 할당 할 때 SELECT 대 SET? (0) | 2020.03.18 |
[SQL] 에서 VARCHAR 날짜 시간으로 변환하는 방법 (0) | 2020.03.18 |
[SQL] SQL 서버에서 레코드를 삭제 한 후 다시 설정 신원 씨 (0) | 2020.03.18 |
[SQL] 변환 UTF-8 SQL 데이터베이스에 문자열 클래식 ASP (0) | 2020.03.18 |