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

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

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

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

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


Но поле в выходном наборе всё равно добавится.
Necrosssзапрос использует UNION и помимо этого конкретного селекта есть и другие. И в других селектах никакой PrIDCount нет.Полный текст запроса (оригинального или адекватной модели) в студию.
...
Рейтинг: 0 / 0
19.11.2016, 00:27
    #39350191
Necrosss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать чтобы MySQL не считал переменную за колонку
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
19.11.2016, 02:26
    #39350202
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать чтобы MySQL не считал переменную за колонку
Necrosss,

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


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

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

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


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