我有两个MySQL表,状态和trans:
州(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.A>搜索trans中的所有条目。 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的新手,我似乎找不到相同的问题并在互联网上回答。
非常感谢,
基督教
答案 0 :(得分:0)
这应该可以解决问题,我已经在SQL Server 2008中对它进行了测试,所以希望它也适用于MySQL。
select energy from states
where id in
(
select distinct i from trans where a > 30
union
select distinct j from trans where a > 30
)
答案 1 :(得分:0)
好的......在Axarydax和其他人的帮助下,我使用了(基本上等效的)命令:
SELECT energy FROM states,
(SELECT i FROM trans where A>30. UNION SELECT j i FROM trans WHERE A>30.) temp
WHERE states.id=temp.i;
如果我在i,j和A上有索引,它的工作速度足够快。