За последние 24 часа нас посетили 20114 программистов и 1693 робота. Сейчас ищут 1844 программиста ...

Простая задачка по MySQL

Тема в разделе "MySQL", создана пользователем LonelYNighTWolF, 27 сен 2017.

  1. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Добрый день.

    Задали простейшую задачку, как казалось, но так и не получилось ее решить.
    Требуется одним запросом из базы получить выгрузку со значениями все кроме Name 1,2 и 3 где type 1.
    Данных будет много от 1- до бесконечности.
    Сама таблица:
    id Name Type
    1 1 1
    2 2 1
    3 2 3
    4 3 1
    5 3 2
    6 1 2
    7 3 null
    8 1 null
    9 4 1
    Может кто подскажет.
    Заранее спасибо.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.859
    Симпатии:
    749
    Адрес:
    Татарстан
    Код (Text):
    1. Select * from table where Name not in(1,2,3) && type=1
     
  3. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    К сожалению, нет, не работает.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.859
    Симпатии:
    749
    Адрес:
    Татарстан
    Все работает..... проверил
    Просто не умеете пользоваться
    или у вас типы полей не числовые, если это строки - то в кавычки нужно проверяемые значения ставить
    Код (Text):
    1. not in('1','2','3') && type='1'
     
  5. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Тип полей стоит int.
    При проверке данного запросы ответом выходит только одно значение, где name -4, а type -1.
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Всё верно.
     
  7. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    а задаче требует вывести :
    3 2
    3 null
    4 1
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.859
    Симпатии:
    749
    Адрес:
    Татарстан
    значит задача сформулирована неверно, или ответ
     
  10. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Задача - всё кроме Name 1,2 и 3 где type 1.
    --- Добавлено ---
    в предложном варианте :
    2 2 - лишнее значение
    3 3
    1 2 - лишнее значение
    4 1
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Простыми словами, name должно быть 1 или 2, а так же 3 в случае type равном один?
     
  12. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Сама таблица:
    id Name Type
    1 1 1 - не выгружается.
    2 2 1 - не выгружается.
    3 2 3 - не выгружается.
    4 3 1 - не выгружается.
    5 3 2
    6 1 2 - не выгружается.
    7 3 null
    8 1 null - не выгружается.
    9 4 1
    Да, верно, только НЕ должно быть.
     
    #12 LonelYNighTWolF, 28 сен 2017
    Последнее редактирование: 28 сен 2017
  13. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Вы хоть сами условие понимаете?
    Почему у вас значения "5 3 2" попадает в результат?
     
  14. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Да, верно.
    Конечно. Потому, что оно не должно выпадать только если Name равно трем, а Type равен единице, а все остальные должны.
     
  15. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    ADSoft дал почти правильный вариант.
    Должно быть так:
    PHP:
    1. Select * from table where not (`Name` in(1,2,3) and (`Type` = 1 and `Type` is not null))
    Результат запроса будет:
    Код (Text):
    1. 3   2   3
    2. 5   3   2
    3. 6   1   2
    4. 7   3   null
    5. 8   1   null
    6. 9   4   1
     
    #15 Chushkin, 28 сен 2017
    Последнее редактирование: 28 сен 2017
  16. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    К сожаление не то. Нужно что бы осталось:
    3 2
    3 null
    4 1
     
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    LonelYNighTWolF нравится это.
  18. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    То, то - условие выполняется "все, кроме Name 1,2 и 3 где type 1."
    Или меняйте условие.

    upd.
    Аааа, дошло. Сейчас напишу...
    --- Добавлено ---
    PHP:
    1. Select * from table where not(`Name` in(1,2) or (`Name` = 3 and (`Type` = 1 and `Type` is not null)))
    результат:
    Код (Text):
    1. 5    3    2
    2. 7    3    null
    3. 9    4    1
    --- Добавлено ---
    О, romach тоже самое написал.
     
    #18 Chushkin, 28 сен 2017
    Последнее редактирование: 28 сен 2017
    LonelYNighTWolF нравится это.
  19. LonelYNighTWolF

    LonelYNighTWolF Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    9
    Симпатии:
    0

    Большое вам спасибо! Ясно почему у меня не работало, я не совсем корректно скобки применял.
    Прошу простить меня за то, что задачу сформулировал не очень понятно.