我得到了以下查询的意外输出。:
SELECT *
FROM Ethymologie
WHERE VerbundenesWort IN
(SELECT DISTINCT VerbundenesWort FROM
(SELECT DISTINCT VerbundenesWort FROM Ethymologie WHERE VerbundenesWort IS NOT NULL)
ORDER BY RANDOM() LIMIT 1)
我想从一个表('Ethymologie')中选择一个值(在这里无关紧要;使用random()进行演示)。
然后我想列出同一个表中具有相同值的所有行。
每个子查询都像魅力一样。
当我使用整个SQL查询时,有问题的结果才会变得可见。 这是奇怪结果的截图。
谁能告诉我我做错了什么?
THX!
答案 0 :(得分:0)
我猜猜联合词= 1的条目是你觉得奇怪的 这是因为(我必须再次猜测,因为缺少MCVE,提示提示或至少是架构,暗示提示) 你的架构有"关节词"作为文本,当您将似乎是索引的内容存储到另一个表中时(在该细节中没有设计问题)。
因此IN
运营商会找到' 1'在里面' 10'。
因此,您的问题的实际解决方案是将列更改为某种整数(可能是外键)。
但万一你不能或不想,
这是一些解决当前架构的代码。
SELECT *
FROM Ethymologie
WHERE VerbundenesWort =
(select *
from
(SELECT DISTINCT VerbundenesWort
FROM Ethymologie
WHERE VerbundenesWort IS NOT NULL
)
order by random() limit 1
);
请注意,如果存储实际的联合词而不是索引/整数,则可能会遇到同样的问题。这是因为特殊的文本,由联合词组成。寻找Donaudampfschiff'在Donaudampfschiffahrtsgesellschaft'也会引起问题。
如果您希望能够使用几个随机选择的单词之一(例如LIMIT 2
)创建行列表,那么您必须坚持使用IN
,但将模式更改为int / key,或者(丑陋的解决方法)使用单词边界分隔符进行比较,这当然不是构建在SQLite中的,但是有点神奇可以做到这一点。但是你不希望那种用于制作鱼腥模式的解决方法的魔法,不是吗? ; - )