好吧,我有兩個表:如何根據表#2中的結果篩選表1中的結果?
events
:id
,title
,description
trip_events
:id
,event_id
(點events
id
。)
我需要從表中結果名爲events
。
SELECT *
FROM `events`
很簡單,對吧?
我需要實現的事情是,我需要從events
選擇的結果,但不包括那些在trip_events
行(如果events
。id
!= trip_events
。event_id
的除外)。
這裏是例如:
events
:
id
:5
,id
:6
,id
:7
,id
:8
;
trip_events
:
event_id
:6
,event_id
:8
;
有了這個數據集,只能用ID事件5
和6
將返回。
如何做到這一點?
我想是這樣的:
SELECT *
FROM `events`
JOIN `trip_events`
ON (`trip_events`.`event_id` = `events`.`id`)
WHERE `trip_events`.`event_id` != `events`.`id`
但沒有奏效。
無論如何,我認爲加入解決方案會更好的性能的原因。 – 4ndrew 2011-12-30 09:12:46
@ 4ndrew,是的,可能是,但只要性能不是問題(並且連接查詢實際上更快),我認爲它的意圖更具可讀性和明顯性。左連接用語是衆所周知的,但是你需要知道這個成語,並且在你能夠閱讀代碼之前確定使用了什麼成語。 – 2011-12-30 10:29:36
@ 4ndrew:在測試數據之前,你無法知道什麼更快。據我所知,「不在」與「不存在」相比「左連接 - 零」具有相似的性能。 – 2011-12-30 10:44:48