SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.03.2018 01:35:22

olex
Участник
Зарегистрирован: 07.01.2011
Сообщений: 5

Хитрая выборка из трех таблиц, прошу помощи

Есть таблица articles

id    title
1    Art_1
2    Art_2
3    Art_3
4    Art_4


Есть таблица location

id    location
1    Украина
2    Россия
3    Япония
4    Киев
5    Чернигов


Есть таблица привязки статей к локации art2loc

id    loc_id    art_id
1        1        1
2        4        1
3        2        2
4        1        3
5        5        3
6        3        4


Задача: выбрать статьи, где нет локаций Украина и Россия. Тоесть с вышеуказанных данных должна выбраться только статья с id 4

Вот моя неверно работающая конструкция:

SELECT  
  `a`.`id`,
  `a`.`title`,
FROM
  `articles` `a`
  LEFT OUTER JOIN `art2loc`  `b` ON (`a`.`id` = `b`.`art_id`)
  LEFT OUTER JOIN `location` `c` ON (`c`.`id` = `b`.`loc_id`)
WHERE
  `c`.`id` != 1 AND
  `c`.`id` != 2
GROUP BY
  a.id
ORDER BY
  `a`.`id` DESC
LIMIT 9



Проблема возникает так как у одной статьи может быть указаны несколько локаций, к примеру Украина, Киев. И в мою выборку попадают статьи id 1 и 3 ((

Помогите плиз, так как моих познаний не хватает ((( Спасибо заранее!

Неактивен

 

#2 25.03.2018 02:03:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5838

Re: Хитрая выборка из трех таблиц, прошу помощи

SELECT  
  `a`.`id`,
  `a`.`title`,
FROM
  `articles` `a`
WHERE
id not in (select art_id from art2loc where loc_id in(1,2));

Неактивен

 

#3 25.03.2018 02:16:11

olex
Участник
Зарегистрирован: 07.01.2011
Сообщений: 5

Re: Хитрая выборка из трех таблиц, прошу помощи

vasya, спасибки, сейчас попробую... а как этот запросик будет себя чувствовать в плане нагрузки, учитывая, что если в таблице `articles` будет к примеру 200 тыс строк, то в таблице `art2loc` будет больше миллиона строк..?

----------

Спасибо! Работает как надо!  big_smile big_smile big_smile

Отредактированно olex (25.03.2018 03:00:42)

Неактивен

 

#4 25.03.2018 03:53:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5838

Re: Хитрая выборка из трех таблиц, прошу помощи

olex написал:

vasya, спасибки, сейчас попробую... а как этот запросик будет себя чувствовать в плане нагрузки, учитывая, что если в таблице `articles` будет к примеру 200 тыс строк, то в таблице `art2loc` будет больше миллиона строк..?

зависит от версии, индексов и ...
проведите эксперимент

Неактивен

 

#5 25.03.2018 04:27:41

olex
Участник
Зарегистрирован: 07.01.2011
Сообщений: 5

Re: Хитрая выборка из трех таблиц, прошу помощи

Ок, ладно, все равно там результат будет кешироваться, думаю покатит. Спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson