У меня есть две таблицы MySQL, состояния и транс:
состояний (200 000 записей) выглядит следующим образом:
id (INT) - also the primary key
energy (DOUBLE)
[other stuff]
trans (14 000 000 записей) выглядит так:
i (INT) - a foreign key referencing states.id
j (INT) - a foreign key referencing states.id
A (DOUBLE)
Я хотел бы найти все записи в trans с trans.A> 30. (скажем), а затем вернуть записи энергии из (уникальных) состояний, на которые ссылается каждая соответствующая запись. Я делаю это с двумя промежуточными таблицами:
CREATE TABLE ij SELECT i,j FROM trans WHERE A>30.;
CREATE TABLE temp SELECT DISTINCT i FROM ij UNION SELECT DISTINCT j FROM ij;
SELECT energy from states,temp WHERE id=temp.i;
Кажется, это работает, но есть ли способ сделать это без промежуточных таблиц? Когда я пытался создать временную таблицу с помощью одной команды прямо из trans:
CREATE TABLE temp SELECT DISTINCT i FROM trans WHERE A>30. UNION SELECT DISTINCT j FROM trans WHERE A>30.;
это заняло больше времени (предположительно, потому что пришлось дважды искать большую таблицу преобразования. Я новичок в MySQL и, похоже, не могу найти эквивалентную проблему и ответить там на веб-страницах.
Большое спасибо,
Christian