За последние 24 часа нас посетили 21050 программистов и 1600 роботов. Сейчас ищут 2345 программистов ...

Помогите составить запрос с условием

Тема в разделе "PHP и базы данных", создана пользователем ionico, 1 дек 2012.

  1. ionico

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

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Здравствуйте.
    Не могу придумать как получить данные, которые мне нужны из БД одним запросом.
    У меня есть две таблицы:
    Код (Text):
    1.  
    2. TABLE statuses (ID, STATUS)
    3. 1 1
    4. 3 2
    5. 5 1
    6.  
    7. TABLE products (ID, NAME, ...)
    8. 1 product_1
    9. 2 product_2
    10. 3 product_3
    11. 4 product_4
    12. 5 product_5
    ID таблицы statuses и ID таблицы products связаны.

    Мне нужно выбрать все ID таблицы products, для которых в таблице statuses значение STATUS <> 2, а также все ID таблицы products, для которых в таблице statuses вообще нет записей.

    Мой запрос следующий:
    Код (Text):
    1. SELECT products.ID FROM products, statuses WHERE statuses.STATUS <> 2 AND statuses.ID = products.ID
    Этот запрос возвращает только те ID, для которых существуют строки в таблице statuses, исключая ситуации, когда STATUS = 2.

    Как изменить запрос так, чтобы те ID таблицы products, для которых в таблице statuses вообще нет строк тоже попадали в результат запроса?

    Заранее спасибо за помощь!
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Такое разделение на две таблицы обычно делают, когда для одной записи из таблицы products может быть произвольное количество записей в таблице statuses. То есть одному продукту может быть присвоено одновременно несколько статусов. А в твоём случае, похоже, что одному продукту присваивается один статус. То есть одной записи из первой таблицы может соответствовать только одна запись из второй. В таком случае во второй таблице (имхо) нет никакого смысла. Абсолютно. Просто запихай статусы в первую таблицу и упрости себе жизнь.
     
  3. ionico

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

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    На самом деле у меня таблица statuses намного обширнее, чем я её описал, и она необходима, т. к. в ней действительно есть связи многие ко многим с таблицей products. Но мне нужно найти решение для описанного мной примера. В том случае, который предложили вы, я конечно же не стал бы использовать отдельную таблицу.
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Тогда LEFT JOIN и проверяй на IS NULL
     
  5. ionico

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

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    спасибо ;)