Очередной вопрос по Mysql?

Хочу получить количество всех записей из 3 таблиц с идентичной структурой где колонка private='0'
Хотел сделать это так:
SELECT COUNT(*) FROM users_data, deleted, mails WHERE private='0'

Но так не получается:
#1052 - Столбец 'private' в where clause задан неоднозначно

Поискав информацию по ошибке решаю сделать так:
SELECT COUNT(*) FROM users_data, deleted, mails WHERE users_data.private='0' AND deleted.private='0' AND mails.private='0'

Но в итоге команда долго грузится и не выполняется, высвечивается ошибка gateway timeout
Я не думаю, что дело в объеме данных, их там около 300k строк в сумме, так как по отдельности все нормально работает:
SELECT COUNT(*) FROM users_data WHERE private='0'
Запрос выполняется быстро
  • Вопрос задан
  • 944 просмотра
Решения вопроса 2
GeneMoss
@GeneMoss
void
Вы сделали умножение таблиц, получив очень большое число элементов. Вам нужно объединить выдачу через UNION.
SELECT SUM(cnt) FROM (
	SELECT COUNT(*) as cnt FROM users_data WHERE private='0'
	UNION
	SELECT COUNT(*) as cnt FROM deleted WHERE private='0'
	UNION
	SELECT COUNT(*) as cnt FROM mails WHERE private='0'
) u;
Ответ написан
@RidgeA
потому что при таком запросе получается декартово произведение количества записей.

Есть чудесная команда explain, которая может показать сколько записей обрабатывается.

По идее должно быть равно произведению количества записей в каждой из таблиц.

Лучше сделать либо отдельными запросами, либо через union
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы