【问题标题】:Sqlite3, SELECT QuerySqlite3,选择查询
【发布时间】:2021-07-06 16:44:09
【问题描述】:
我的桌子看起来像这样:
| index |
ID |
Name |
Value |
| 1 |
1 |
x |
NULL |
| 2 |
1 |
y |
NULL |
| 3 |
1 |
z |
123 |
| 4 |
2 |
x |
456 |
| 5 |
2 |
y |
NULL |
| 6 |
2 |
z |
789 |
| 7 |
3 |
x |
1011 |
| 8 |
3 |
y |
NULL |
| 9 |
3 |
z |
NULL |
| .. |
.. |
.. |
.. |
所以我的目标是只选择名称为 'z' 而不是 NULL 的值。第二个条件是与名称'x'和'y'对应的值是NULL。在上表中,这只是 Rowindex 为“3”的值。我是 sqlite3 的新手,如果有人可以帮助我,我会很高兴。
大卫
【问题讨论】:
标签:
sqlite
select
conditional-statements
【解决方案1】:
您可以在WHERE 子句中使用相关子查询,当Name 为'x' 或'y' 时,它会检查Name 对应ID 的最大值:
SELECT t1.*
FROM tablename t1
WHERE t1.Name = 'z'
AND (
SELECT MAX(t2.Value)
FROM tablename t2
WHERE t2.ID = t1.ID AND t2.Name IN ('x', 'y')
) IS NULL
或者,NOT EXISTS:
SELECT t1.*
FROM tablename t1
WHERE t1.Name = 'z'
AND NOT EXISTS (
SELECT 1
FROM tablename t2
WHERE t2.ID = t1.ID AND t2.Name IN ('x', 'y') AND t2.Value IS NOT NULL
)
请参阅demo。