@solid477

Как вывести уникальные записи из трёх таблиц?

Доброго времени суток. Подскажите пожалуйста. Мне нужно вывести уникальные записи из трёх таблиц по столбцу ticker. Все три таблицы имеют структуру:
CREATE TABLE `table1` (
 `id` int(8) NOT NULL AUTO_INCREMENT,
 `ticker` varchar(16) NOT NULL,
 `lastprice` double NOT NULL,
 `pricechange` double NOT NULL,
 `pricechangepercent` float NOT NULL,
 `highprice` double NOT NULL,
 `lowprice` double NOT NULL,
 `volume` double NOT NULL,
 `quoteVolume` float NOT NULL,
 `spread` float NOT NULL,
 `time` varchar(22) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `ticker` (`ticker`)
) ENGINE=InnoDB AUTO_INCREMENT=300 DEFAULT CHARSET=utf8

Делаю вот так:
SELECT * FROM table1 UNION SELECT * FROM table2 UNION SELECT * FROM table3

Но в итоге, выводятся все значения и те, которые повторяются в столбце ticker. Мне нужны только уникальные записи по столбцу ticker.
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FirststepsRu
Что то на ум не приходит в один запрос. Надо слить все значения ticker в одну таблицу, затем выбрать только уникальные, и потом из основных таблиц выбрать по ним данные.

Как-то так:
CREATE TEMPORARY TABLE all_ticker (`ticker` varchar(16) NOT NULL);
INSERT INTO all_ticker SELECT ticker FROM table1;
INSERT INTO all_ticker SELECT ticker FROM table2;
INSERT INTO all_ticker SELECT ticker FROM table3;

CREATE TEMPORARY TABLE uniq_ticker (`ticker` varchar(16) NOT NULL)
    SELECT ticker FROM all_ticker GROUP BY ticker HAVING count(*) = 1;

SELECT * FROM table1 t1 JOIN uniq_ticker u ON t1.ticker = u.ticker;
SELECT * FROM table2 t2 JOIN uniq_ticker u ON t2.ticker = u.ticker;
SELECT * FROM table3 t3 JOIN uniq_ticker u ON t3.ticker = u.ticker;

DROP TEMPORARY TABLE all_ticker, uniq_ticker;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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