我在查詢表1中的日期列基於子查詢。 where子句中的子查詢1從外鍵引用表中獲取描述,子查詢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月硬編碼,因爲這是來自一個窗體。正如所建議的,我可以使用內部連接,但我認爲這會使查詢不易讀。 –