Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite子查询传递奇怪的结果_Sqlite - Fatal编程技术网

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)不必输入它。那么,你能把两张图片中的信息编辑成文本吗?不要忘记将几行“插入…”作为示例数据库内容。您知道,