排除sqlite子查询中的记录
基于这篇文章,我得到了一个从组块中选择随机记录的查询。有关背景信息,请参阅 但我意识到我需要排除新字段qcinfo设置为“Y”的行 当然,每当随机ID碰到qcinfo='Y'时,这会隐藏行,这是错误的。我需要在区块中排除该行,但如果任何记录具有qcinfo“Y”,则仍然会为区块生成一个随机记录 下面的注释注释行给出了我需要的内容,但不排除Y。当我在子查询中包含WHERE时,我没有得到任何记录,也不知道为什么排除sqlite子查询中的记录,sql,sqlite,random,subquery,Sql,Sqlite,Random,Subquery,基于这篇文章,我得到了一个从组块中选择随机记录的查询。有关背景信息,请参阅 但我意识到我需要排除新字段qcinfo设置为“Y”的行 当然,每当随机ID碰到qcinfo='Y'时,这会隐藏行,这是错误的。我需要在区块中排除该行,但如果任何记录具有qcinfo“Y”,则仍然会为区块生成一个随机记录 下面的注释注释行给出了我需要的内容,但不排除Y。当我在子查询中包含WHERE时,我没有得到任何记录,也不知道为什么 select t.chunk ,t.id, t.qcinfo, t.link from
select t.chunk ,t.id, t.qcinfo, t.link from marlintag t
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from marlintag
-- where qcinfo <> 'Y'
group by chunk ) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
将WHERE子句移动到子查询
select t.chunk ,t.id, t.qcinfo, t.link from table1
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from table1
where qcinfo <> 'Y'
group by chunk
) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
无论何时进行比较,都会排除空值,因此需要为此设置陷阱。尝试qcinfo'Y'或qcinfo为空的地方!但现在我得到的是qcinfo='Y'的记录。奇怪的思想?我也尝试过只选择空值,但我仍然用Y获取记录。这是SQLite简单特性的一个方面吗?我也切换到MySQL,我用这个SQL也遇到了同样的问题。
select t.chunk ,t.id, t.qcinfo, t.link from marlintag t
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from marlintag
-- where qcinfo <> 'Y'
group by chunk ) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
select t.chunk ,t.id, t.qcinfo, t.link from table1
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from table1
where qcinfo <> 'Y'
group by chunk
) sq
on t.chunk = sq.chunk
and t.id = sq.random_id