У меня есть 3 таблицы в базе данных, которые имеют аналогичные значения и одинаковую структуру таблицы. Я пытаюсь получить количество вхождений каждого value
по уникальным user
,
Структура БД
Посмотреть на SQLFiddle
user | value | id
user | value | id
user | value | id
Я могу запустить следующую команду MySQL, чтобы получить желаемые результаты по 1 таблице за раз.
SELECT value,COUNT(*) as count FROM TABLE_1 GROUP BY value ORDER BY count DESC;
Мне нужно выполнить эту команду одновременно для всех трех таблиц, чтобы получить уникальные вхождения «value» среди списка «users», который содержит множество дубликатов.
Учитывая ваши комментарии, так как вы хотите удалить дубликаты, используйте UNION
объединить данные из таблиц вместе:
SELECT value, COUNT(*) as count
FROM (
SELECT user, value, id
FROM TABLE_1
UNION
SELECT user, value, id
FROM TABLE_2
UNION
SELECT user, value, id
FROM TABLE_3 ) t
GROUP BY value
ORDER BY count DESC;
Вам нужно использовать UNION —
SELECT value, COUNT(*) as count
FROM (
SELECT user, value, id
FROM TABLE_1
UNION
SELECT user, value, id
FROM TABLE_2
UNION
SELECT user, value, id
FROM TABLE_3 ) tables
GROUP BY value
ORDER BY count DESC;
Выход —
+-------+-----+
|car |8 |
|boat |4 |
|truck |3 |
|house |2 |
|skates |1 |
|bike |1 |
+-------+-----+
согласиться с комментариями, это то, что я бы порекомендовал вам сделать.
CREATE TABLE members (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(255),
);
INSERT INTO members (username)
SELECT DISTINCT user FROM table1
UNION SELECT DISTINCT user FROM table2
UNION SELECT DISTINCT user FROM table3;
ALTER table1
ADD COLUMN user_id INT(10)
ADD INDEX `user_id` (`user_id`);
ALTER table2
ADD COLUMN user_id INT(10)
ADD INDEX `user_id` (`user_id`);
ALTER table3
ADD COLUMN user_id INT(10)
ADD INDEX `user_id` (`user_id`);
UPDATE table1 t,
JOIN members m ON m.username = t.username
SET t.user_id = m.id;
UPDATE table2 t,
JOIN members m ON m.username = t.username
SET t.user_id = m.id;
UPDATE table3 t,
JOIN members m ON m.username = t.username
SET t.user_id = m.id;
ALTER table1
DROP user;
ALTER table2
DROP user;
ALTER table3
DROP user;
теперь вы также можете настроить ограничения внешнего ключа на столбцы user_id и id, если хотите.
но чтобы запросить общее количество, вы можете просто присоединиться к таблицам .. убедитесь, что вы добавили индекс в каждое из полей id, чтобы оно правильно соединялось.
SELECT your_stuff
FROM members m
LEFT JOIN table1 t1 ON t1.user_id = m.id
LEFT JOIN table2 t2 ON t2.user_id = m.id
LEFT JOIN table3 t3 ON t3.user_id = m.id