На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Помогите написать правильный запрос , MySQL
    Здравствуйте, Господа!
    Есть 2 таблицы:
    ExpandedWrap disabled
      USERS
      Id
      uname

    ExpandedWrap disabled
      UGROUP
      group_id
      user_id

    В таблице ugroup один id пользователя может быть в нескольких группах. Мне нужно вывести всех пользователей из users кроме тех, что присутствуют в группе. Например: group_Id = 1.Те должны быть выведены все пользователи, кроме тех, которые присутствуют в группе 1.
    Заранее спасибо!
    PS я с джонами запутался
    Сообщение отредактировано: HighMan -
      ExpandedWrap disabled
        SELECT  u.ID, u.uname
        FROM users u
        LEFT JOIN ugroup g ON u.id = g.user_id AND g.groupID = 1
        WHERE ISNULL(g.userID ) = 1
        MIF, спасибо большое! Сегодня попозже проверю, тогда и закрою вопрос.
        А, вообще, сокращение не должно превращаться в кастрацию :)
          MIF, все, практически, как мне нужно, но...
          Если в таблице ugroup нет упоминаний о некоторой группе, например: ugroup.group_id = 232, то должен выводиться весь список пользователей, а по данному запросу выдает пустой список. Как это поправить?
          В ugroup может и не быть какой-то группы. Это не основная таблица групп, а вспомогательная, в которой группам сопоставляются пользователи. Т.е. если запрос ссылается на неизвестный ugroup.group_id, то должен выводиться весь список пользователей.

          Добавлено
          ExpandedWrap disabled
            SELECT users.id, users.uname
            FROM users
            LEFT JOIN ugroup ON users.id = ugroup.user_id
            AND ugroup.group_id =1
            WHERE ugroup.user_id IS NULL

          Вроде, так получается как мне нужно. Если ugroup.group_id ссылается на значение, которого еще нет, то выводится весь список users. Если ugroup.group_id ссылается на имеющиеся значения, то выводятся только те users, которые отсутствуют в нужной группе.
          Вроде, я этот запрос с разными значениями и результат меня устраивает, вот только... Грамотно ли он составлен? Не "зарыл" ли я в нем логическую ошибку, которая вылезет впоследствии?
            Цитата MIF @
            ExpandedWrap disabled
              SELECT  u.ID, u.uname
              FROM users u
              LEFT JOIN ugroup g ON u.id = g.user_id AND g.groupID = 1
              WHERE ISNULL(g.userID ) = 1

            Это не коммерческий код. Читайте GoF.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0324 ]   [ 15 queries used ]   [ Generated: 10.05.24, 16:12 GMT ]