Имам таблица и се нуждая от резултата в различни редове, където трябва да съществуват различни ключови стойности в една колона.
Получавам тази таблица веднъж на ден чрез REST API от друга система и изглежда в моята MySQL DB така (опростено):
+----+------+------------+-------+
| 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
- 2-ра идея:
Създаване на две временни таблици и след това към съединение. Но се нуждае от време за създаване на две таблици и обединяването на двете нови временни таблици.
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;
- 3-та идея:
Създаване само на временна таблица и използване на това за свързване с помощта на основната таблица:
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'
Коя от идеите ми е най-подходяща за голяма маса или има по-добро решение.
Благодаря предварително.
SHOW CREATE TABLE table
, тъй като трябва да знаем типовете данни и индексите, за да ви дадем възможно най-ефективната заявка за избор за вашата съществуваща структура - person Raymond Nijland   schedule 30.06.2019