2012-07-20 62 views
0

我在mysql的兩個表結構如下:查找不匹配MySQL的條目在其他表

Events: id 
Events_artists: event_id, more columns 

我想在表中查找events_artists的event_ids沒有與ID在比賽中事件。

我想出了迄今爲止唯一的事情是這樣的:

SELECT * FROM events,events_artists WHERE events_artists.event_id!=events.id 

然而,這是廢話,基本上返回整個表。

有誰知道如何解決這個問題?

謝謝!

查爾斯

發現的解決方案,這要歸功於安傑Bobak

SELECT * FROM events_artists其中EVENT_ID沒有(請從事件ID)

回答

3

這種方法如何?

select * from events_artists where event_id is null or event_id not in (select id from events) 
+0

謝謝!完美的作品! – weltschmerz 2012-07-20 12:07:12

+1

很高興爲您效勞。在未來運行建議的查詢與「解釋」或「解釋分析」(取決於數據庫服務器)。它將向您顯示查詢計劃並允許您優化查詢。 – 2012-07-20 12:13:51

+0

但是還有一個問題:您的解決方案如何返回0行的結果,但stb的解決方案返回的結果是否超過0?它真的是一樣的嗎? – weltschmerz 2012-07-21 15:16:02

1
select * from events_artists a 
left join events b on a.id = b.id 
where b.id is null 

你的方法使用笛卡爾積它連接每排列在一起。因此,您的where條件只是過濾包含不匹配行的結果,但由於笛卡爾積

+0

謝謝!不知何故,這有點慢,Tombom已經提到我的數據庫可能有問題。我將必須檢查。 – weltschmerz 2012-07-20 12:07:49

+0

正如Tombom所說,這通常應該可以正常工作。我本來期望「不在」聲明比我們的要慢。 – stb 2012-07-20 12:10:29

+0

正如我評論tombom的解決方案。運行查詢分析器並查看您的方法或我的方法對於給定的一組數據是否更好。 – 2012-07-20 12:20:36

相關問題