За последние 24 часа нас посетили 17840 программистов и 1648 роботов. Сейчас ищут 868 программистов ...

Помогите с запросом

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

  1. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Есть таблица такой структуры
    object properti val
    1 1 1
    2 1 2
    3 2 1
    4 3 2
    1 4 1
    7 2 1

    нужно выбрать object для которых есть (properti=1 and val=1) and (properti=4 and val=1) одним запросом
     
  2. Benjamin

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

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

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    как select делать я в курсе
    но это проблему не решает
    тут надо нестандартное решение
     
  4. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    [sql]select MARKET_RELATIONS.object from MARKET_RELATIONS where MARKET_RELATIONS.object in (select MARKET_RELATIONS.object from MARKET_RELATIONS where MARKET_RELATIONS.properti=1 and MARKET_RELATIONS.val=8) and MARKET_RELATIONS.object in (select MARKET_RELATIONS.object from MARKET_RELATIONS where MARKET_RELATIONS.properti=3 and MARKET_RELATIONS.val=391 ) group by MARKET_RELATIONS.object having count(MARKET_RELATIONS.object)>=2[/sql]

    вот такой вариант
    может как-то проще можно?
     
  5. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Жуть...
    А чем Вас простой запрос не устраивает?
    select * from table
    where (properti=1 and val=1) and (properti=4 and val=1)
    group by object
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Chushkin
    А такое вообще работает???


    inline
    [sql]select object from table where (properti=1 and val=1)
    and object in
    (select object from table where (properti=4 and val=1))[/sql]

    [sql]select object from table join
    (select object from table where (properti=4 and val=1)) as t on t.object=table.object
    where (properti=1 and val=1)
    [/sql]
     
  7. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Volt(220)
    А, дошло, чего автор хочет, - мой вопрос/вариант в корзину.

    А Ваш второй вариант (с join) может лучше без подзапроса?
    [sql]select table.object from table
    inner join object as t on t.properti=4 and t.val=1 and t.object=table.object
    where table.properti=1 and table.val=1
    group by table.object
    [/sql]п.с. Я предпочитаю использовать подзапросы только тогда, когда действительно необходимо.