Конференция "Базы" » SQL Запрос выводит пустоту [FireBird 1.5]
 
  • DelphiN! (24.07.08 12:11) [0]
    Всем доброго времени суток!
    Хочу вывести минимальную, максимальную и среднюю выручку по датам для клиентов тип которых Card User, однако если добавляю условие проверки типа клиента, запрос выводит пустоту, хотя такие клиенты в БД 100% есть.
    В чем может быть дело?


    select distinct(cast(time_ as date)) DATE_,min(summ_),avg(summ_),max(summ_)
    from casebase MAIN where (prim_ <> 'Login activated')
    and (prim_ <> 'Login deactivated')and(time_ >= '01.07.2008')and
    ((select type_ from users where cardno_ = main.cardno_) = 'Card User')
    group by 1
    order by 1

  • Медвежонок Пятачок © (24.07.08 12:15) [1]
    запрос выводит пустоту, хотя такие клиенты в БД 100% есть.

    1000 % что нет
  • DelphiN! (24.07.08 12:17) [2]

    > Медвежонок Пятачок ©   (24.07.08 12:15) [1]


    :) Клиенты со значением в поле Users.type_ равным "Card User" - есть!
  • stas © (24.07.08 12:19) [3]
    Поочереди отключи каждое условие и узнаешь что неправильно.
  • Медвежонок Пятачок © (24.07.08 12:19) [4]
    Но у тебя запрос-то не такой
    select * from clients where Users.type_ = "Card User"
  • DelphiN! (24.07.08 12:20) [5]

    > stas ©   (24.07.08 12:19) [3]
    >
    > Поочереди отключи каждое условие и узнаешь что неправильно.
    >


    А я знаю какое не правильно, я его выделил жирным
    ((select type_ from users where cardno_ = main.cardno_) = 'Card User')

    но вот  как сделать правильно, не знаю ...
  • Медвежонок Пятачок © (24.07.08 12:22) [6]
    а зачем Card User снаружи скобок
  • stas © (24.07.08 12:24) [7]
    выбери одного юзера, который точно вернет твой запрос без этого условия и выполни отдельно запрос, что он вернул?
    select type_ from users where cardno_ = юзер
  • Медвежонок Пятачок © (24.07.08 12:24) [8]
    and
    ((select type_ from users where cardno_ = main.cardno_) = 'Card User')


    and exists(select null from users where cardno_ = main.cardno_ and тип = 'Card User')
  • DelphiN! (24.07.08 12:24) [9]

    > Медвежонок Пятачок ©   (24.07.08 12:19) [4]
    >
    > Но у тебя запрос-то не такой
    > select * from clients where Users.type_ = "Card User"


    По моему предположению
    В основном запросе при прохождении каждого пользователя делается под запрос ((select type_ from users where cardno_ = main.cardno_) = 'Card User'), который в свою очередь находит текущего пользователя(из основного запроса) в таблице Users и возвращает его тип, а основной запрос сравнивает, соответствует ли этот тип необходимому.
    Но к сожалению мое предположение не является верным, а как его сделать верным я не знаю ... :(
  • Медвежонок Пятачок © (24.07.08 12:25) [10]
    а как его сделать верным я не знаю ... :(

    Знаешь, но не признаешься. Надо выучить язык запросов
  • DelphiN! (24.07.08 12:28) [11]

    > stas ©   (24.07.08 12:24) [7]

    > выбери одного юзера, который точно вернет твой запрос без
    > этого условия и выполни отдельно запрос, что он вернул?
    > select type_ from users where cardno_ = юзер


    Он вернул "Card User"


    > Медвежонок Пятачок ©   (24.07.08 12:24) [8]
    >
    > and
    > ((select type_ from users where cardno_ = main.cardno_)
    > = 'Card User')
    >
    > and exists(select null from users where cardno_ = main.cardno_
    > and тип = 'Card User')


    Заработало!!! Спасибо всем большущее!!!
  • sniknik © (24.07.08 12:34) [12]
    > делается под запрос ((select type_ from users where cardno_ = main.cardno_) = 'Card User')
    простой join в явном виде будет и быстрее и нагляднее...

    select *
    from casebase с
    INNER JOIN users u ON c.cardno_ = u.cardno_
    WHERE u.type_ = 'Card User'

    возвращает данные? а убрать условие в WHERE?

    +
    distinct(cast(time_ as date))
    нафиг не нужен, раз у тебя по этому полю группировка, оно и так будет уникально по значениям.
 
Конференция "Базы" » SQL Запрос выводит пустоту [FireBird 1.5]
Есть новые Нет новых   [134473   +28][b:0][p:0.001]