서브 쿼리를 기반으로 테이블 1의 날짜 열을 쿼리하고 있습니다. Subquery 1 in where 절은 외래 키 참조 테이블에서 설명을 가져오고 하위 쿼리 2는 다른 조건으로 데이터를 가져옵니다.서브 쿼리의 가능한 대안
내 질문에,이 쿼리를 더 효과적으로 만들 수있는 대안은 무엇입니까?
SELECT count(*) AS non_saturday
FROM t_booking
WHERE p_id IN (
SELECT p_id
FROM p_detail
WHERE p_name IN ('A','B')
)
AND date_format(p_date, '%Y%m%d') IN (
SELECT DISTINCT CONCAT (
gregorian_ccyy
,gregorian_month
,gregorian_day
)
FROM m_gregorian_calendar1 c
WHERE c.day_of_the_week = (
SELECT day_id
FROM m_gregorian_day
WHERE day_name = 'SATURDAY'
)
AND c.gregorian_ccyy = '2012'
AND c.gregorian_month = '10'
)
하나의 제안은 하위 쿼리 대신 JOIN을 사용하는 방법입니다. – Taryn
@bluefeet 언급했듯이 하위 쿼리를 사용하는 대신 세 테이블에 간단하게 참여할 수 있습니다. 그러나 인덱스를 사용할 수 없으므로 테이블에 조인하기 위해 date_format/concatenation 비즈니스를 사용하고 싶지는 않습니다. –
2012 년을 추가하는 것을 잊어 버렸습니다. 10 월은 양식에서 오는 것으로 하드 코딩되었습니다. 제안 된대로 내부 조인을 사용할 수는 있지만 쿼리를 읽기 쉽게 만들 것이라고 생각합니다. –