Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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子查询中的记录_Sql_Sqlite_Random_Subquery - Fatal编程技术网

排除sqlite子查询中的记录

排除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

基于这篇文章,我得到了一个从组块中选择随机记录的查询。有关背景信息,请参阅 但我意识到我需要排除新字段qcinfo设置为“Y”的行

当然,每当随机ID碰到qcinfo='Y'时,这会隐藏行,这是错误的。我需要在区块中排除该行,但如果任何记录具有qcinfo“Y”,则仍然会为区块生成一个随机记录

下面的注释注释行给出了我需要的内容,但不排除Y。当我在子查询中包含WHERE时,我没有得到任何记录,也不知道为什么

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