Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554

WHERE не видит колонку, созданную подзапросом SELECT

10.12.2019, 09:46. Показов 3535. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал запрос:
SQL
1
SELECT postpaid_account.*,(SELECT MIN(radacct.acctstarttime) FROM radacct WHERE username=postpaid_account.username) AS act_start FROM postpaid_account;
получаю тот результат, что и ожидал, включая и колонку start с данными в ней:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
+----+-----------------------+----------+----------+---------+--------+------------+-----------+-------------+------------+-------------+------+----------+--------------+---------------------+
| id | realname              | username | password | bill_by | simunt | created_by | bw_upload | bw_download | expire     | nasid       | mac  | autobill | passport     | act_start           |
+----+-----------------------+----------+----------+---------+--------+------------+-----------+-------------+------------+-------------+------+----------+--------------+---------------------+
|  5 | проверка              | uypjsbma | 2222222  | time    |      3 | 3600       |         0 |           0 | NULL       | dmitry_test |      |        0 | 380665836592 | NULL                |
|  7 | рпыварв               | uxjczda0 | 62781841 | time    |      3 | 3600       |         0 |           0 | NULL       | dmitry_test | NULL |        0 |              | NULL                |
| 10 | ачвпрчва              | e9zqyxa8 | 71137638 | time    |      3 | 3600       |         0 |           0 | 1561323600 | dmitry_test |      |        0 | 380665836592 | NULL                |
| 11 | пвва                  | q9q5jmyd | 69462224 | time    |      3 | 3600       |         0 |           0 | NULL       | dmitry_test | NULL |        0 |              | NULL                |
| 12 | еуые 380665836592     | test     | test     | time    |      3 | 3600       |         0 |           0 | 1572559200 | dmitry_test |      |        0 |              | 2019-05-30 11:00:59 |
| 13 | dmitry                | dmitry   | dmitry   | time    |      3 | 3600       |         0 |           0 | NULL       | 14u0phpt    | NULL |        0 |              | NULL                |
+----+-----------------------+----------+----------+---------+--------+------------+-----------+-------------+------------+-------------+------+----------+--------------+---------------------+
6 rows in set (0.01 sec)

если к этому запросу добавить условие по колонке act_start, например так:
SQL
1
SELECT postpaid_account.*,(SELECT MIN(radacct.acctstarttime) FROM radacct WHERE username=postpaid_account.username) AS act_start FROM postpaid_account WHERE act_start IS NULL;
...то получаю в ответ сообщение об ошибке:
Code
1
ERROR 1054 (42S22): Unknown column 'act_start' in 'where clause'
что я делаю не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2019, 09:46
Ответы с готовыми решениями:

Запрос с подзапросом insert / select
прочитал в интернете про запрос с подзапросом вида INSERT...SELECT пытаюсь сам смастерить, но не получается. подскажите, где ошибка?...

SELECT WHERE IN с подзапросом
Я в sql не очень разбираюсь, поэтому не ругайтесь, если что-то совсем простое спрашиваю. Есть таблица recording с полем asrtist_credit....

Как сохранить созданную колонку dataGridView?
Как сохранить созданную колонку dataGridView, а потом, когда снова открыл программу, то созданная колонка на месте?

17
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
10.12.2019, 10:28
Цитата Сообщение от Dmitry Посмотреть сообщение
что я делаю не так?
Если создана колонка с алиасом, то на этом уровне запроса к нему можно обращаться только в ORDER BY (поскольку он выполняется последним, когда выборка уже сделана).
Делай охватывающий запрос, там уже можно сослаться на этот алиас.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
10.12.2019, 10:34  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Делай охватывающий запрос
можно пример или описание подобного?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
10.12.2019, 11:29
Цитата Сообщение от Dmitry Посмотреть сообщение
можно пример
SQL
1
2
3
4
5
6
7
8
9
SELECT *
FROM 
  (
 
  -- твой запрос без WHERE
 
  ) T1   -- здесь не помню, ставится ли в MySQL AS или нет (т.е. просто T1 или AS T1)
 
WHERE act_start IS NULL
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
11.12.2019, 12:51
Цитата Сообщение от Grossmeister Посмотреть сообщение
(т.е. просто T1 или AS T1)
просто T1
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
13.12.2019, 14:19  [ТС]
сори, но видно я тупой.
вот настрочил я еще один запрос:
SQL
1
SELECT v.*,(SELECT VALUE FROM radgroupcheck WHERE groupname=v.billingplan AND attribute='Max-All-Session') AS t_lim,(SELECT SUM(acctsessiontime) FROM radacct WHERE v.username=username GROUP BY username) AS t_elasped FROM voucher AS v ;
он пыжится секунд 10 и в конце концов выдает результат (таблицу на сто тысяч строк). только вот мне жуть как хочется сравнить оба вычисленных подзапросами значения - t_elasped и t_lim ! и поэтому, я в этот запрос добавляю where, вот так:
SQL
1
SELECT v.*,(SELECT VALUE FROM radgroupcheck WHERE groupname=v.billingplan AND attribute='Max-All-Session') AS t_lim,(SELECT SUM(acctsessiontime) FROM radacct WHERE v.username=username GROUP BY username) AS t_elasped FROM voucher AS v WHERE t_elasped > t_lim;
и получаю результат:
Code
1
ERROR 1054 (42S22): Unknown column 't_elasped' in 'where clause'
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
13.12.2019, 15:59
Dmitry, поле t_elasped в таблице voucher ?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
13.12.2019, 16:10  [ТС]
нет, оно "вычисленное".

так причина в этом (отсутствии поля t_elasped в таблице voucher)?
как тогда нужно поступать, чтобы можно было его использовать?

и кстати, в сообщении об ошибке указано поле t_elasped, но нет ничего про поле t_lim, которое также отсутствует в таблице voucher. Или в сообщении об ошибке мускул сообщает не более одной ошибки за раз?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
14.12.2019, 16:28  [ТС]
не знаю, правильное это решение или нет, но помогло создание view-а с требуемым запросом. и уже при обращении к вьюву срабатывают всевозможные where, использующие данные "вычисленных" столбцов
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
08.02.2020, 12:31  [ТС]
Отвечаю на свой же вопрос.
Во всех этих случаях решением является использование HAVING вместо WHERE!
т.е., HAVING работает аналогично ORDER BY, про который выше писал Grossmeister, т.е.
Цитата Сообщение от Grossmeister Посмотреть сообщение
он выполняется последним, когда выборка уже сделана
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
09.02.2020, 18:25
Цитата Сообщение от Dmitry Посмотреть сообщение
HAVING работает аналогично ORDER BY
те, кто найдет этот топик по поиску - не верьте ему
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
10.02.2020, 00:48  [ТС]
Цитата Сообщение от mac1eod Посмотреть сообщение
не верьте ему
чему именно? тому, что HAVING решил мою задачу? дык, "удачное" время было вами выбрано для своего комментария, я сегодня как раз снова клацал эти запросы (из поста #1). поэтому, показать, что HAVING "работает", мне очень и очень просто:

1. используем WHERE, получаем ошибку:
Code
1
2
mysql> SELECT postpaid_account.*,(SELECT MIN(radacct.acctstarttime) FROM radacct WHERE username=postpaid_account.username) AS act_start FROM postpaid_account WHERE act_start IS NULL;
ERROR 1054 (42S22): Unknown column 'act_start' in 'where clause'
2. используем HAVING, получаем то, что и ожидалось:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT postpaid_account.*,(SELECT MIN(radacct.acctstarttime) FROM radacct WHERE username=postpaid_account.username) AS act_start FROM postpaid_account HAVING act_start IS NULL;
+----+-----------------------------------+-----------------------------+------------+---------+--------+------------+-----------+-------------+--------+-------+------+----------+----------+-----------+
| id | realname                          | username                    | password   | bill_by | simunt | created_by | bw_upload | bw_download | expire | nasid | mac  | autobill | passport | act_start |
+----+-----------------------------------+-----------------------------+------------+---------+--------+------------+-----------+-------------+--------+-------+------+----------+----------+-----------+
|  5 | Петров К. Б.                      | skb                         | skb2017    | packet  |      3 | 3600       |      4096 |        4096 | NULL   | NULL  | NULL |        0 |          | NULL      |
|  6 | Иванов Ю.Н.                       | un                          | un2017     | packet  |      3 | 3600       |      8192 |        8192 | NULL   | NULL  |      |        0 |          | NULL      |
| 16 | Иванов Н.Ю.                       | nu2                         | nu2017     | packet  |      3 | 2592000    |         0 |           0 | NULL   | NULL  |      |        0 |          | NULL      |
| 19 | Иванов Н.Ю.                       | 7c-01-91-87-3e-acKoenig2018 | Koenig2018 | time    |      3 | 3600       |         0 |           0 | NULL   | NULL  | NULL |        0 |          | NULL      |
| 20 | Иванов Н.Ю.                       | d0-c5-f3-19-b9-1fKoenig2018 | Koenig2018 | time    |      3 | 3600       |         0 |           0 | NULL   | NULL  | NULL |        0 |          | NULL      |
| 21 | Сидорова Маргарита                | d4-a3-3d-ba-f5-4aKoenig2018 | Koenig2018 | time    |      3 | 3600       |         0 |           0 | NULL   | NULL  | NULL |        0 |          | NULL      |
| 22 | Сидорова Маргарита                | D0-81-7A-B4-C3-04Koenig2018 | Koenig2018 | time    |      3 | 3600       |         0 |           0 | NULL   | NULL  | NULL |        0 |          | NULL      |
+----+-----------------------------------+-----------------------------+------------+---------+--------+------------+-----------+-------------+--------+-------+------+----------+----------+-----------+
7 rows in set (0.04 sec)
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
10.02.2020, 10:53
Цитата Сообщение от Dmitry Посмотреть сообщение
чему именно? тому, что HAVING решил мою задачу
тому что
Цитата Сообщение от Dmitry Посмотреть сообщение
HAVING работает аналогично ORDER BY
0
10.02.2020, 10:57  [ТС]

Не по теме:

мда уж, фраза явно "краткость - сестра таланта" кому-то сильно запала в душу.

0
фрилансер
 Аватар для Алексей1153
6455 / 5657 / 1129
Регистрация: 11.10.2019
Сообщений: 15,070
10.02.2020, 15:47
mac1eod, нужно уметь читать дальше, а не останавливаться на определённом триггере )

Цитата Сообщение от Dmitry Посмотреть сообщение
HAVING работает аналогично ORDER BY, про который выше писал Grossmeister, т.е. Сообщение от Grossmeister он выполняется последним, когда выборка уже сделана
0
10.02.2020, 16:18  [ТС]

Не по теме:

Алексей1153, не мешайте человеку чсв растить... ;)

0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
10.02.2020, 22:14
Алексей1153, зануда ты... нет слов)
0
фрилансер
 Аватар для Алексей1153
6455 / 5657 / 1129
Регистрация: 11.10.2019
Сообщений: 15,070
10.02.2020, 22:21
mac1eod, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2020, 22:21
Помогаю со студенческими работами здесь

Сайт не видит созданную Cookie
Здравствуйте. Создаю форму авторизации и столкнулся с проблемой. После авторизации создается в php cookie со названием name и значением...

InterBase не видит созданную БД в Firebird
InterBase невидит созданную БД в Firebird, что можно сделать?

Не получается сравнить колонку varchar2 в select
Есть строка, в колонке varchar2 которой хранится xml текст. Как я не пробывал его копировать и затем вставлять в where=' selected...

Как заполнить колонку А от 1 до 200, колонку В от 2 до 40, колонку С от 3 до 600
Написать макрос, на текстовом листе заполнить колонку А от 1 до 200, колонку В от 2 до 40, колонку С с 3 до 600 Заранее большое спасибо!

Проблема с Bluetooth на ноутбуке: не видит\подключает колонку
Добрый день, вопрос следующего плана: Есть одна китайская ноунейм блютуз колонка и один ноутбук леново ideapad 115. Колонка нормально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru