У меня есть таблица, и мне нужен результат для разных строк, где должны существовать разные значения ключа в одном столбце.
Я получаю эту таблицу один раз в день через REST API из другой системы и выглядит в моей БД MySQL следующим образом (упрощенно):
+----+------+------------+-------+
| ID | type | date | value |
+----+------+------------+-------+
| 1 | A | 2019-06-01 | 1 |
| 2 | B | 2019-06-01 | 2 |
| 3 | A | 2019-06-02 | 4 |
| 4 | B | 2019-06-03 | 5 |
| 9 | A | 2019-06-09 | 11 |
| 10 | B | 2019-06-09 | 14 |
| 11 | A | 2019-06-24 | 99 |
+----+------+------------+-------+
Теперь мне нужно выбрать, что все результаты, только если существует значение для типа A и типа B в тот же день. Результат должен выглядеть так:
+------------+-------+--------+----+------+------------+-------+
| date | typeA | valueA | ID | type | date | value |
+------------+-------+--------+----+------+------------+-------+
| 2019-06-01 | A | 1 | 2 | B | 2019-06-01 | 2 |
| 2019-06-09 | A | 11 | 10 | B | 2019-06-09 | 14 |
+------------+-------+--------+----+------+------------+-------+
Использование подвыборов ... вероятно, плохая идея для больших таблиц ... но я не уверен.
SELECT * from
(SELECT date as dateA, value as valueA from V1 where type = 'A') AS subA,
(SELECT date as dateB, value as valueB from V1 where type = 'B') AS subB
WHERE dateA = dateB
Создание двух временных таблиц и затем объединение. Но нужно время, чтобы создать две таблицы и объединить обе новые временные таблицы.
CREATE TEMPORARY table tA SELECT date, type as typeA, value as valueA from V1 WHERE type = 'A';
CREATE TEMPORARY table tB SELECT date, type as typeB, value as valueB from V1 WHERE type = 'B';
SELECT * from tA
INNER JOIN tB on tA.date = tB.date;
Создание только на временной таблице и использование этого для объединения с использованием основной таблицы:
CREATE TEMPORARY table tB SELECT * from V1 WHERE type = 'B';
SELECT * from V1
INNER JOIN tB on V1.date = tB.date
where V1.type = 'A'
Какая из моих идей лучше всего подходит для большого стола или есть лучшее решение.
Заранее спасибо.