У меня есть таблица с именем 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, чтобы я не «перегружал» сервер.
Любые предложения будут оценены.
спасибо, человек работает. Призрак был немного быстрее. – user1812076
Actualy я был быстрее: P Рад, что это помогло. – Nightmaresux
ты прав :) Я принял это. – user1812076