Вычислительный запрос

Дося
Дата: 31.01.2013 08:21:19
Форумчане, нужно ваше содействие и сила коллективного разума
проблема в том что данный запрос

select (10*(`adult_price`)) - (23*(`children_price`)) from `ZooPrices`
where `adult_price` in
(select `adult_price` from `ZooPrices`
where `[time]`="17")
and `children_price` in
(select `children_price` from `ZooPrices`
where `[time]`="10");

по идее должен вывести значение, посчитанное в первой операции, а на практике результат запроса - сам текст операции (формула).
Какие ваши предложения: где я ошибся, оплошал? Будет интересно услышать Ваши идеи
tanglir
Дата: 31.01.2013 08:35:07
Дося
а на практике результат запроса - сам текст операции (формула).
ХШ говорит, что это название столбца у вас такое получилось, а количество строк результата - ноль.
select (10*(`adult_price`)) - (23*(`children_price`)) as `result`
from `ZooPrices` z
join (
select distinct `adult_price` from `ZooPrices`where `[time]`="17"
) t1 on z.`adult_price`=t1.`adult_price`
join (
select distinct `children_price` from `ZooPrices` where `[time]`="10"
) t2 on z.`children_price`=t2.`children_price`;
что выдаст?
а подзапросы, отмеченные жёлтым, по отдельности что-нибудь возвратят?
Дося
Дата: 31.01.2013 09:17:57
tanglir, да `[time]`=10 соответствует `children_price` = 50, а `[time]` = 17 соответствует `adult_price` = 250
tanglir
Дата: 31.01.2013 10:28:44
Дося, а вы понимаете, что ваш запрос, равно как и моя модификация, обработает записи только с такими (адулт/чилдрен)прайсами, для которых найдутся записи с обоими введёнными временами (10 и 17 в примере)?
Вам точно именно это надо или что-то другое?
use test;
create table zooprices(adult_price int, children_price int, `[time]` int);
insert into zooprices values (250,0,17),(0,50,10);
-- первый вариант тестовых данных
-- на них этот запрос...
select (10*(z.`adult_price`)) - (23*(z.`children_price`)) as `result`
from `ZooPrices` z
join (
select distinct `adult_price` from `ZooPrices`where `[time]`="17"
) t1 on z.`adult_price`=t1.`adult_price`
join (
select distinct `children_price` from `ZooPrices` where `[time]`="10"
) t2 on z.`children_price`=t2.`children_price`;
-- ...не выдаст ничего
-- а вот на таких
insert into zooprices values (250,50,17),(10,50,10);
-- уже что-то будет
-- но я сомневаюсь, что это будет то, чего вы хотели...
Дося
Дата: 31.01.2013 13:05:53
tanglir, не, прикол именно в том что у меня на каждое время, в том-то и дело, есть и взрослая и детская расценка, но все равно ничего не выводит - только формулу, которую я писал выше
bochkov
Дата: 31.01.2013 13:12:27
Дося
а на практике результат запроса - сам текст операции (формула).

Какие еще формулы?
Покажи результат
Дося
Дата: 31.01.2013 13:45:07
Это что бы вы убедились чтобы таблицы не пусты
Дося
Дата: 31.01.2013 13:45:55
Дося
Дата: 31.01.2013 13:49:35
tanglir
Дата: 31.01.2013 13:53:44
Дося, ну и таки шо мы видим? Таки есть всего 2 записи с ид=10 или 17 (1-я и 3-я по счёту сверху вниз), и в них таки не совпадают друг с другом ни адулт-, ни чилдрен-прайсы.
А теперь вдумчиво читайте 13854931

PS. Но если это вдруг была не вся таблица, то покажите результат
select * from zooprices where time in (10,17)