|
|
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
У меня такой запрос типа: SELECT Pa.ObjectPathID, Pa.ObjectPath, Max(CASE r.LowNodePathID WHEN 25 THEN c.data ELSE NULL END) AS Name, ... FROM ... WHERE ... Хочу написать в WHERE Name='Вилка' На что он ругается, грит нет такого столбца Name. Да столбца то нет, но алиас то столбца есть. Что алиасы нельзя в условия пихать? Как же тогда написать простейший запрос типа: SELECT a.quantity*b.price AS sum FROM a, b WHERE a.id=b.id AND sum>10 Он тоже не будет работать? Конечно можно написать WHERE a.quantity*b.price>10. Но в моем случае аналогично не сделаешь, потому что грит что нельзя агрегируемые функции в WHERE пихать. Что делать? Как обмануть SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:10:55 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
Probuy HAVING Name='...' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:19:42 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
подзапрос скорее всего.... весь запрос на бочку!... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:28:39 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
алиас колонки можно использовать только в order by в условиях используются не алиасы колонок, а названия столбцов таблицы с алиасами таблиц, так что всё логично, хотя и неудобно отправляйте во временную таблицу или пишите два раза выражение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:44:15 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
> Guest having можно использовать, только когда используется group by ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:44:56 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
2 Белов Владимир Nu tak vivesti v SELECTe pervichniy kluch i sdelat` po nemu GROUP BY - v chom problema? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:49:14 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
первое что приходит в голову сначала во временную таблицу, а затем из неё по условию where может и корявое решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 12:51:31 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
По-моему, будет работать так (в простейшем запросе): Код: plaintext 1. 2. или, в Вашем случае (не проверяла): Код: plaintext 1. 2. 3. 4. т.е. в условие запроса надо включать не псевдоним, а само вычисляемое выражение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:20:15 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
Erika, вы забыли что у меня MAX(), а WHERE MAX() нельзя. Читайте исходное сообщение. Для всех остальных: если обратили внимание то это перекрестный запрос (поэтому там есть Group BY), да еще к тому же он у меня динамически формируется. Попробовал использовать Having, но все равно ругается:Invalid column name 'Name'. Привожу полный текс запроса, уже вместе с Having Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:45:21 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
2 kost А почему нельзя просто написать where c.data = 'Вилка' ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:53:45 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
c.data='Вилка' нельзя написать потому что мне нужно что бы только столбец Name был Вилка, а не все столбцы, которые формируются из таблицы chardata. Если вы заметили там еще Obozn есть. А так как запрос динамический (саму динамику я опустил), то столбцов из CharData может быть куча. И тогда получиться что во всех столбцах только Вилка останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 14:14:50 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
Пардон, действительно не заметила, что запрос должен содержать Group By >>вы забыли что у меня MAX(), а WHERE MAX() нельзя Зато Having Max() можно. Код: plaintext должно пройти. >>если обратили внимание то это перекрестный запрос (поэтому там есть Group BY) Group By - не потому, что перекрестный, а потому, что содержит функции агрегирования для строк(групп). BOL: The GROUP BY clause is used to produce aggregate values for each row in the result set. When used without a GROUP BY clause, aggregate functions report only one aggregate value for a SELECT statement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 14:25:17 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
2 kost Ничего не понял из Вашего объяснения, а вот глядя на запрос вижу, что конструкции where Max(CASE r.LowNodePathID WHEN 25 THEN c.data ELSE NULL END) = 'Вилка' и where c.data = 'Вилка' идентичны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 14:29:21 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
2 Gennady Нет не идентичны, смотрите весь запрос. Еще раз объясню: в данном запросе из таблицы chardata получаются два столбца с алиасами Name и Obozn и если я поставлю c.data="Вилка", то оба этих столбца будут отфильрованы по этому значению. А мне нужно, чтобы только Name. 2 Erika Действительно, такая конструкция работает. Если больше никто ничего не посоветует, то буду ее использовать. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 15:09:38 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
2 kost Нда, действительно, недосмотрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 15:15:49 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
Можно запихнуть вычисляемое выражение во view а условие WHERE налагать потом. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Также можно использовать подзапрос. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. P.S. Писал на коленке, так что сильно не ругайте. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 16:48:46 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
И сразу нашел ошибку, второй код д.б. такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 16:52:05 |
|
||
|
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
|
|||
|---|---|---|---|
|
#18+
2 VVG На мой взгляд предложенные тобой методы будут работать медленнее, чем один запрос (обязательно проверю). А поскольку данный запрос формируется у меня динамически на основании данных введенных пользователем (если кто-то уже догадался то это запрос на поиск объектов в базе по условиям пользователя), то вариант с view вообще по-моему отпадает. А вот вариант с подзапросом конечно остается, но больно уж эти подзапросы медленно работают. Все равно спасибо за предложение. Будет писча для проверки скорости работы при различных вариантах, поскольку быстрота поиска для пользователя - одно из главных его желаний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2002, 14:11:55 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32037448&tid=1821678]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 403ms |

| 0 / 0 |
