ФорумРазработкаБазы данных → Выборка элементов из таблицы которых нет в другой таблице

Выборка элементов из таблицы которых нет в другой таблице

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 27 сентября 2009 г. 3:19

    Есть таблица где хранятся статьи.
    И вторая таблица, где каждому элементу присвоены какие-либо статьи из первой таблицы.

    задача:
    Вывести на экран 2 списка.
    1 список статей принадлежащих элементу
    2 список статей которые еще не принадлежат этому элементу


    SELECT
      dir_stat.*,
      stat.title as title
    FROM
      dir_stat JOIN stat  ON stat.id!=dir_stat.id_stat
    WHERE
      dir_stat.id_dir={$ID}


    Я думал так != получится. Но увы =(
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 сентября 2009 г. 8:47, спустя 5 часов 27 минут 32 секунды

    Professor, с left join работал? right?
    adw/0
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 27 сентября 2009 г. 8:51, спустя 4 минуты 14 секунд

    Пробовал. Не то. Пока делаю 2 запроса. Первым выбираю список статей принадлежащих элементу и запихиваю id в строку '1','2','3'… а вторым выбираю все статьи не относящиеся к данным id.
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 27 сентября 2009 г. 10:49, спустя 1 час 58 минут 31 секунду

    Эдворд дело говорит … если, я правильно понял задачу …
    RIGHT JOIN …. WHERE dir_stat.id_stat IS NULL
    Или LEFT JOIN … я не понял какая именно таблица какая
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 27 сентября 2009 г. 11:06, спустя 16 минут 44 секунды

    нет нет. не правильно поняли задачу.
    Что значит LEFT и RIGHT?

    Выбрать значения либо из левой таблицы либо из правой соответственно.

    А мне нужно выбрать элементы из любой таблицы (тот же INNER) где элементы по id не равны.

    Вот
    dir_stat JOIN stat  ON stat.id=dir_stat.id_stat 


    это выбираем все элементы из обоих таблиц где поля id и id_stat равны.

    А мне нужно выбрать те где они НЕ равны.
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 28 сентября 2009 г. 0:56, спустя 13 часов 49 минут 46 секунд

    а что мешает сделать:
    dir_stat JOIN stat  ON(stat.id != dir_stat.id_stat)

    ?
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 28 сентября 2009 г. 1:17, спустя 21 минуту

    так я и написал что так не работает=)
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 28 сентября 2009 г. 1:22, спустя 5 минут 15 секунд


    выбрать элементы из любой таблицы (тот же INNER)
    Секундочку … чуть выше, ты говорил, что тебе надо выбрать именно статьи. Так из любой или все-таки cтатьи.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 28 сентября 2009 г. 2:06, спустя 44 минуты 16 секунд

    Секундочку … чуть выше, ты говорил, что тебе надо выбрать именно статьи. Так из любой или все-таки cтатьи.

    да просто не в этом суть.

    Мне можно и LEFT и INNERT использовать. Это ничего не меняет.
    потому что потому что мне нужно вытащить статьи из левой таблицы которых нет в правой. А если их нет в правой то без разницы LEFT или INNERT (Я сейчас говорю решении данной проблеммы. Естественно надо использовать либо LEFT либо RIGHT. Но это не является существенным при решении данной задачи)

  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 28 сентября 2009 г. 2:12, спустя 5 минут 52 секунды


    А если их нет в правой то без разницы LEFT или INNERT
    Как это без разницы? LEFT тем и отличается от INNER, что вытаскивает ВСЕ ИЗ ЛЕВОЙ таблицы, даже если нет соответствия в правой.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 28 сентября 2009 г. 4:17, спустя 2 часа 5 минут 1 секунду

    Мне можно и LEFT и INNERT использовать. Это ничего не меняет.

    ага не меняет как же
    http://www.codinghorror.com/blog/archives/000976.html
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 28 сентября 2009 г. 5:07, спустя 49 минут 23 секунды

    Во!! шикарно!!Спасибо за ссылку.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 сентября 2009 г. 5:14, спустя 7 минут 27 секунд


    Во!! шикарно!!Спасибо за ссылку.
    сто раз эту ссылку приводили )
    Спустя 240 сек.
    http://pyha.ru/forum/search2?search=codinghorror

    http://pyha.ru/forum/topic/2390.msg43035#msg43035 =)
    Спустя 18 сек.
    http://pyha.ru/forum/topic/3085.msg61475#msg61475 это почитай
    adw/0
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 28 сентября 2009 г. 5:59, спустя 44 минуты 29 секунд

    Да я знаю. Видел этот сайт. Около полугода назад. Но запамятовал =(
    Простите =*(

Пожалуйста, авторизуйтесь, чтобы написать комментарий!