我正在使用 PostgreSql 9。我有一个简单的问题。 哪个查询效率更高?
SELECT users_sessions.session_id, users_sessions.series
FROM users_sessions
WHERE users_sessions.user_id = 8
AND users_sessions.session_id IN (
SELECT session_id
FROM sessions_history
GROUP BY sessions_history.session_id
HAVING SUM(CASE WHEN sessions_history.action = 2 THEN 1 END) = 0
)
对比
SELECT US8.session_id,Us8.series
FROM
( SELECT us.session_id as S_ID, us.series
FROM users_sessions as US
WHERE US.user_id = 8 ) AS US8
INNER JOIN
(SELECT SH.session_id as SH_ID
FROM session_history as SH
WHERE SH.action <> 2) AS SH2
ON US8.session_id = SH2.session_id
最佳答案
另一种解决方案使用 NOT EXISTS,这是对您似乎要问的内容的精确翻译:
给我不存在操作 2 的 session :
SELECT session_id, series
FROM users_sessions as us
WHERE users_sessions.user_id = 8
AND NOT EXISTS
( SELECT *
FROM sessions_history as sh
WHERE action = 2
AND us.session_id = sh.session_id
)
关于sql - 哪个查询效率更高?内部联接与子查询?总计与有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455843/