powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сделать чтобы MySQL не считал переменную за колонку
5 сообщений из 5, страница 1 из 1
Сделать чтобы MySQL не считал переменную за колонку
    #39349541
Necrosss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть переменная, идущая после SELECT:
"count(*) AS PrIDCount"

Проблема в том что запрос использует UNION и помимо этого конкретного селекта есть и другие. И в других селектах никакой PrIDCount нет.

Соответственно вознгикает ошибка: "The used SELECT statements have a different number of columns".

Можно ли сделать чтобы MySQL не считал PrIDCount за ещё одну колонку ?
...
Рейтинг: 0 / 0
Сделать чтобы MySQL не считал переменную за колонку
    #39349565
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NecrosssЕсть переменная, идущая после SELECT:
"count(*) AS PrIDCount"Это не переменная, а поле выходного набора с именем PrIDCount.
Если тебе нужна именно переменная, то должно быть
Код: sql
1.
SELECT PrIDCount:=count(*)


Но поле в выходном наборе всё равно добавится.
Necrosssзапрос использует UNION и помимо этого конкретного селекта есть и другие. И в других селектах никакой PrIDCount нет.Полный текст запроса (оригинального или адекватной модели) в студию.
...
Рейтинг: 0 / 0
Сделать чтобы MySQL не считал переменную за колонку
    #39350191
Necrosss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Оригинальный запрос огромный, вот его миниатюрная модель:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
(
	SELECT
	
	t1.First,
	t2.Second
	
	FROM table1 AS t1
	
	JOIN `table2` AS t2
	ON `t2`.`ID` = `t1`.`ID`
	
	WHERE t2.Something = Something
)
	UNION
(
SELECT
	
	t1.First,
	t2.Second,
	count(*) AS PrIDCount,
	
	FROM table1 AS t1
	
JOIN `table2` AS t2
	ON `t2`.`ID` = `t1`.`ID`
	
	WHERE t2.Something = Something

GROUP BY `First` HAVING PrIDCount > 1
ORDER BY PrIDCount DESC
LIMIT 3
)




Ошибка "The used SELECT statements have a different number of columns", как я понял, возникает именно из за того что в первом запросе есть 2 колонки (First и Second), в во втором их 3 (First, Second и PrIDCount).

PS./
Если я прописываю вот так:
GROUP BY `First` HAVING count(*) > 1
ORDER BY count(*) DESC

то оно работает.
Но мне показальсь это не очень оптимизированным (функция count(*) вызывается 2 раза)
...
Рейтинг: 0 / 0
Сделать чтобы MySQL не считал переменную за колонку
    #39350202
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Necrosss,

Добавьте в первой части запроса NULL AS PrIDCount в секцию SELECT, если в итоге нужны все три поля.
Или, наоборот, уберите count(*) AS PrIDCount во второй части, если это поле не нужно в результате.


Necrosss(функция count(*) вызывается 2 раза)Нет, один раз. Это не функция в прямом смысле слова, это агрегатная функция, счетчик.

И сильно подозреваю, что вам нужен UNION ALL, а не UNION.
...
Рейтинг: 0 / 0
Сделать чтобы MySQL не считал переменную за колонку
    #39350615
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Necrosss,

переменную обнови с @ спереди, и все будет ок.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сделать чтобы MySQL не считал переменную за колонку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]