За последние 24 часа нас посетили 19478 программистов и 1604 робота. Сейчас ищут 828 программистов ...

Нестандартный запрос. Помогите!

Тема в разделе "MySQL", создана пользователем inline, 23 мар 2011.

  1. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Есть таблица
    table (object,properti,val)
    object - айди объекта
    properti - айди свойста объекта
    val - айди значения свойства объекта

    Нужно выбрать properti, которые имеют object-ы с properti=7 и val=3

    Например таблица
    1 3 4
    1 7 3
    2 4 1
    2 7 3
    3 1 1
     
  2. Benjamin

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

    С нами с:
    23 янв 2009
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Тула
    А почему нестандартный?
     
  3. Shumomer

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

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
    [sql]SELECT `properti` FROM `table` WHERE `object` IN (SELECT `object` FROM `table` WHERE `properti`=7 and `val`=3) GROUP BY `properti`[/sql]
     
  4. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Shumomer
    использование IN сильно тормозит выполнение

    нужно как-то через join если это возможно
     
  5. Shumomer

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

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
    Решается стандартной оптимизацией через EXISTS (SELECT 1 FROM ... Сразу так писать не стал т.к. понятно что структура дана только для примера.
     
  6. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    ничего не понял
    структура такой и есть в реальности
     
  7. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Запрос не нужен, - ответ: 7 ;)
     
  8. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    И это правильно в том случае. Замените подзапрос, чтобы находил одно значение, и будет быстрее.
    Ну и какие проблемы? JOIN это тоже подзапрос.
    п.с. Предполагаю, что в вопросе была опечатка и нужны не свойства, а объекты:
    [sql]SELECT t1.* FROM `table` as t1
    inner join table as t2 on t2.object = t1.object and t2.properti = 7 and t2.val = 3[/sql]
     
  9. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    а как сделать через join выборку общего результата у более чем двух таблиц?
     
  10. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Легко! см. Help, раздел "JOIN Syntax"
     
  11. Shumomer

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

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
  12. DarkKemPeR

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

    С нами с:
    11 мар 2011
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    мы пришли остается загадкой...
    Если в задании опечатка и нужно выбрать не свойства, а объекты, то почему не сделать всего лишь через AND:

    [sql]SELECT 'object' FROM 'table' WHERE properti=7 AND val=3 GROUP BY 'object';[/sql]
     
  13. Shumomer

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

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
    Имхо нет там опечатки, просто корявая формулировка. У меня тоже нормально сформулировать не получилось, примерно так: запрос который выберет все значения `properti` соотвествующие значениям `object` у которых хотя-бы однажды встречается `properti`=7 и `val`=3.
     
  14. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    тема закрыта! всем спасибо!