sqlite子查询传递奇怪的结果
我获得以下查询的意外输出:sqlite子查询传递奇怪的结果,sqlite,Sqlite,我获得以下查询的意外输出: 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) 我只想从表('
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查询时,有问题的结果才可见。 这是一个奇怪结果的截图 谁能告诉我我做错了什么
谢谢 我猜joint word=1的条目是您觉得奇怪的地方。
这是由以下事实造成的(我不得不再次猜测,因为缺少MCVE、hint-hint或至少是schema、hint-hint)
您的模式将“联合词”作为文本,而您将似乎是索引的内容存储到另一个表中(在该细节方面没有设计问题) 因此中的
操作符将在“10”中找到“1”
因此,问题的实际解决方案是将列更改为某种整数(可能是外键)
但如果您不能或不想这样做,
下面是一些代码,用于处理当前模式
SELECT *
FROM Ethymologie
WHERE VerbundenesWort =
(select *
from
(SELECT DISTINCT VerbundenesWort
FROM Ethymologie
WHERE VerbundenesWort IS NOT NULL
)
order by random() limit 1
);
请注意,如果存储的是实际的联合词而不是索引/整数,则可能会遇到相同的问题。这是因为一种特殊的文本,由联合词组成。在“Donaudampfschiffahrtsgesellschaft”中查找“Donaudampfschiff”也会导致问题
如果您希望能够使用几个随机选择的单词(例如限制2
)中的一个创建一个行列表,那么您必须坚持使用中的,但将schema更改为int/key,或者(难看的解决方法)使用单词边界分隔符进行比较,这当然不是SQLite内置的,但有一点魔法可以做到这一点。但是你不希望这种魔法被用来制造一个可疑的模式,是吗?;-) 我猜joint word=1的条目是您觉得奇怪的地方。
这是由以下事实造成的(我不得不再次猜测,因为缺少MCVE、hint-hint或至少是schema、hint-hint)
您的模式将“联合词”作为文本,而您将似乎是索引的内容存储到另一个表中(在该细节方面没有设计问题)
因此
中的操作符将在“10”中找到“1”
因此,问题的实际解决方案是将列更改为某种整数(可能是外键)
但如果您不能或不想这样做,
下面是一些代码,用于处理当前模式
SELECT *
FROM Ethymologie
WHERE VerbundenesWort =
(select *
from
(SELECT DISTINCT VerbundenesWort
FROM Ethymologie
WHERE VerbundenesWort IS NOT NULL
)
order by random() limit 1
);
请注意,如果存储的是实际的联合词而不是索引/整数,则可能会遇到相同的问题。这是因为一种特殊的文本,由联合词组成。在“Donaudampfschiffahrtsgesellschaft”中查找“Donaudampfschiff”也会导致问题
如果您希望能够使用几个随机选择的单词(例如限制2
)中的一个创建一个行列表,那么您必须坚持使用中的,但将schema更改为int/key,或者(难看的解决方法)使用单词边界分隔符进行比较,这当然不是SQLite内置的,但有一点魔法可以做到这一点。但是你不希望这种魔法被用来制造一个可疑的模式,是吗?;-)请提供一些代码:<代码>创建…<代码>,还有一些代码< >代码插入…< /代码>作为尝试和演示的基础。请解释结果是多么奇怪。请将您的模式显示为MCVE的最小值。请提供一些代码:<代码>创建…<代码>,以及一些代码>插入……/代码>作为尝试和演示的基础。请解释结果的奇怪之处。请将您的模式显示为MCVE的最小值。好主意,但同样的问题,但请再说一遍!。请注意,您提供的要点是StackOverflow的其他用户不必a)发明/猜测一个b)不必输入它。那么,你能把两张图片中的信息编辑成文本吗?别忘了把几行“insert…”作为示例数据库内容。你知道,这是个好主意,但同样的问题,不过还是一样的!。请注意,您提供的要点是StackOverflow的其他用户不必a)发明/猜测一个b)不必输入它。那么,你能把两张图片中的信息编辑成文本吗?不要忘记将几行“插入…”作为示例数据库内容。您知道,