0
请看看这两个查询:VS外部查询
一:
INSERT INTO QandA (id, body, type, related, author_id, date_time)
SELECT NULL, :body, 0, NULL, :id, unix_timestamp
FROM (select count(*) as num_month,
count(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 day))) as num_day,
count(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 90 minute))) as num_90min
from QANDA
where author_id = :id and
type = 0 and
date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 50 day))
) a
WHERE num_month < 50 and num_day < 6 and num_90min < 1;
二:
INSERT INTO QandA (id, body, type, related, author_id, date_time)
SELECT NULL, :body, 0, NULL, :id, unix_timestamp
FROM dual
WHERE user_id = :id
AND NOT EXISTS (
SELECT count(*) AS num_month
count(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 day))) as num_day,
count(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 90 minute))) as num_90min
FROM QandA
WHERE author_id = :id and
type = 0 and
date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 50 day))
HAVING num_90min > 50
OR num_day > 6
OR num_month > 1
)
正如你看到他们两个areidentical,只是第一个使用外部查询和第二个使用having
条款。那么哪种方法更好?还是有第三种方法比他们更好?