2015-04-03 116 views
0

我有一個名爲website的表,其中包含一些關於網站的數據。該表的列爲:id,網站,quick_url,user_id,狀態等。SQL加入無法弄清楚

表中的每個網站都是由用戶添加的,該用戶保存在user_id列中。

我有另一個表blocks只有3列:id, user_id, website_id

我想從website表中獲得所有網站,這些網站不是由給定的user_id添加的,而是僅包含未被給定的user_id阻止的網站。因此,那些沒有被特定用戶添加或被他阻止的網站。

這裏是我試過:

SELECT * FROM website LEFT OUTER JOIN blocks ON tbl_website.userid = blocks.user_id WHERE website.user_id = blocks.user_id AND blocks.user_id = NULL AND website,user_id != '177' LIMIT 500; 

它並沒有給我想要的結果...

首先,我試圖做這樣的:

SELECT * FROM tbl_website WHERE id<>(SELECT website_id from tbl_website_blocks WHERE user_id = '177') 

,這使得更多的意義對我來說比我以前的查詢,但我得到這個錯誤:子查詢返回多個1行

我想你不能在SQL查詢中有「循環循環」。

我知道我可以做兩個查詢,並過濾結果,但我想盡可能從SQL語言做到這一點,這樣我就不會「超載」服務器。

任何建議,將不勝感激。

回答

3

在你的第二個查詢重寫上

WHERE id not in (SELECT website_id from.....) 

<>的條件,你可以只用一個數值,但您的值select返回列表進行比較,這樣你就可以使用not in,得到的結果是不同的,則標識

+0

感謝的人,它的工作原理是這樣的。幽靈有點快。 – user1812076 2015-04-03 14:39:51

+0

Actualy我更快:P很高興幫助。 – Nightmaresux 2015-04-03 14:42:02

+0

你是對的:)我接受了它。 – user1812076 2015-04-03 15:18:23

1

而不是 '<>' 的選擇列表中,嘗試 '不在'

SELECT * FROM tbl_website 
WHERE id Not In (SELECT website_id from tbl_website_blocks WHERE user_id = '177') 

我還要補充此查詢不是加入。

+0

感謝的人,它的工作! – user1812076 2015-04-03 14:39:22