SQLite3中的数据(说明性)。实际上有几百万行。
a, aardvark
a, anvil
a, apple
a, automaton
b, apple
b, peanut
b, persimmon
b, walnut
我的数据的键实际上是多列,但在这里我刚刚使用了第一列。
因此,我想查找与apple关联的所有键,然后使用它来查询与这些键关联的所有其他值。
像
这样的东西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
答案 0 :(得分: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"
然后,您必须清理结果以排除重复项,并执行您可能感兴趣的任何其他结果集准备。
答案 1 :(得分: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
的列已明确列出。)