@bighoc
php/javascript developer

Как построить SQL который будет количество совпадений в других табилцах?

У меня есть список ид (например 781). И две таблицы.
таблица №1
-id
-model_id
-another_field

таблица №2

-id
-model_id
-another field

Скажем что в таблице №1 есть три записи с значением model_id = 781, а в таблице №2 шесть записей с model_id = 781.

Я хочу получить вот такой рузлтатт

id | таблица №1 | таблица №2
------+--------------+-------------------
781 | 3 | 6

Делаю

SELECT t.id, COUNT(table_one.id) , COUNT(table_two.id) 
FROM "table" "t" 
LEFT JOIN  table_one ON t.id = table_one.model_id 
LEFT JOIN "table_two" ON t.id = table_two.model_id 
WHERE t.id = 781
GROUP BY t.id;


Но получаю не правильный результат, всё хорошо если делать только один джоин, второй всё ломает. Буду благодарен за помощь.
  • Вопрос задан
  • 465 просмотров
Решения вопроса 1
mahoho
@mahoho
Full stack certified PHP developer.
Вот так, если правильно понял задачу - вы сравниваете model_id в двух таблицах с конкретным значением id из первой таблицы:
SELECT id,
	(SELECT COUNT(id) FROM table1 WHERE model_id = t1.id) as 'Таблица №1',
	(SELECT COUNT(id) FROM table2 WHERE model_id = t1.id) as 'Таблица №2'
FROM table1 as t1
WHERE id = 781;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@eldar_web
Я не могу проверить, поэтому могут быть ошибки.
Попробуй так:
SELECT t1.id, COUNT(t1.id), COUNT(t2.id) FROM table1 AS t1, table2 AS t2 WHERE t1.id = 781 GROUP BY t1.id;
Ответ написан
Комментировать
@nozzy
Symfony, Laravel, SQL
можно с union all:
SELECT COUNT(id) AS first_table_id, NULL AS second_table_id
FROM table1
WHERE model_id = 781
UNION ALL
SELECT NULL AS first_table_id, COUNT(id) AS second_table_id
FROM table2
WHERE model_id = 781
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы