2015-04-03 6 views
0

У меня есть таблица с именем website, которая содержит некоторые данные о веб-сайтах. Столами этой таблицы являются: id, веб-сайт, quick_url, user_id, статус и т. Д.SQL Join не может понять это

Каждый сайт, который находится в таблице, был добавлен пользователем, который сохраняется в столбце user_id.

У меня есть другая таблица под названием blocks, которая имеет только 3 столбца: id, user_id, website_id.

Я хочу получить все сайты из таблицы website, которые не были добавлены данным user_id, но также и только те сайты, которые не были заблокированы данным пользователем_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.....) 

с <> вы можете сравнить его только с одним значением, но ваш список выбора возвращает значений, так что вы можете использовать not in, чтобы получить результаты, которые отличаются, то выбранный список идентификаторов

+0

спасибо, человек работает. Призрак был немного быстрее. – user1812076

+0

Actualy я был быстрее: P Рад, что это помогло. – Nightmaresux

+0

ты прав :) Я принял это. – user1812076

1

Вместо '<>', попробуйте 'Not In'

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

Я должен также добавить этот запрос не является объединением.

+0

спасибо, человек, это сработало! – user1812076

Смежные вопросы