2

SQLite3 中的数据(说明性)。实际上有几百万行。

a, aardvark
a, anvil
a, apple
a, automaton
b, apple
b, peanut
b, persimmon
b, walnut

我的数据的关键实际上是多列,但在这里我只使用了第一列。

所以,我想找到与苹果关联的所有键,然后用它来查询与这些键关联的所有其他值。

就像是

select * from data where key in (select key from data where element = apple);

但这不起作用,可能是因为多列键:

 select *  
 from data 
 where k1, k2, k3, k4 in (select k1, k2, k3, k4 from data where element = "apple");  

想法?谢谢!!

TC

4

2 回答 2

1

这将为您提供所有数据:

select *
from data d1
left join data d2 ON (d1.k1 = d2.k1) AND (d1.k2 = d2.k2) AND etc...
where d1.element = "apple"

然后,您必须清理结果以排除重复项并进行您可能感兴趣的任何其他结果集准备。

于 2013-05-20T16:27:33.723 回答
1

这是基于 Ryan 的想法,但是DISTINCT已经消除了重复键,并且NATURAL连接避免了写出所有键比较的需要:

SELECT d1.*
FROM data AS d1
NATURAL INNER JOIN (SELECT DISTINCT k1, k2, k3, k4
                    FROM data
                    WHERE element = 'apple'
                   ) AS d2

(自然连接可能很危险,因为以后可能会无意中更改表,以便更多列具有匹配的名称,但在这里它是安全的,因为d2' 列被显式列出。)

于 2013-05-20T17:09:54.090 回答