我试图减少每天在表格中插入的行数。
在大约5%到10%的人中,我得到的只是主键值。 我想知道是否有任何方法只能选择超过PK值的行。
例如,我现在得到的结果是:
PK1 PK2 cl1 cl2 cl3 cl4
---------------------------------------------------------------------------
a Louis null null 171 15
a Jack 13 null null null
a Marty 17 14 130 null
b Louis 10 11 110 12
b Jack 03 null 185 null
b Marty null null null null
c Louis 16 48 null 25
c Jack null null null null
c Marty 13 null null 64
d Louis null null null null
d Jack 21 12 165 null
d Marty null null null null
我想要的结果:
PK1 PK2 cl1 cl2 cl3 cl4
---------------------------------------------------------------------------
a Louis null null 171 15
a Jack 13 null null null
a Marty 17 14 130 null
b Louis 10 11 110 12
b Jack 03 null 185 null
c Louis 16 48 null 25
c Marty 13 null null 64
d Jack 21 12 165 null
SQL中是否有任何可以更改的请求?现在我在下面使用这个
SELECT
table.PK1,table.PK2,
table.cl1,table.cl2,table.cl3,table.cl4,
FROM
datatable table
提前致谢
编辑:这是一个例子,有超过一百列(不是pk),我不想用"过滤"。 (或者只是在最坏的情况下)
答案 0 :(得分:3)
您可以使用coalesce
功能。它接受任意数量的参数并返回第一个非null参数。例如:
select coalesce(3, 1, 4); --> 3
select coalesce(3, null, 4); --> 3
select coalesce(null, 1, 4); --> 1
select coalesce(null, null, 4); --> 4
select coalesce(null, null, null); --> null
您可以使用它来检查所有列是否为null
:
where coalesce(col1, col2, ..., colN) is null
答案 1 :(得分:1)
最简单的方法就是明确删除所有NULL
的行:
where cl1 is not null or cl2 is not null or cl3 is not null . . .
没有真正的捷径。虽然您可以使用coalesce()
,但这会阻止在查询中使用索引(但它们并未被使用)。
如果您真的想要此查询的性能,可以添加计算列:
alter table t add num_nulls as ( (case when col1 is null then 1 else 0 end) + (case when col2 is null then 1 else 0 end) + . . . );
然后,您可以在t(num_nulls)
上添加索引,并在where
子句中使用它。为了过滤5-10%的行,这是无效的。但是如果你想过滤98%,那么它会更有效率。
答案 2 :(得分:0)
如果您不想写列名,可以这样做。
var extent = ol.proj.transformExtent([-14, 61, 7, 48], 'EPSG:4326',
'EPSG:3857');
var projection = new ol.proj.Projection({
code: 'static-image',
units: 'pixels',
extent: extent
});
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.Image({
source: new ol.source.ImageStatic({
url: 'https://upload.wikimedia.org/wikipedia/commons/f/fd/Ghostscript_Tiger.svg',
projection: projection,
imageExtent: extent
})
})
],
target: 'map',
view: new ol.View({
center: ol.proj.transform([-1.73, 54.32], 'EPSG:4326', 'EPSG:3857'),
zoom: 5
})
});
当所有列(cl1,cl2,cl3,cl4,...,cln = null)值为空时,除前两列或您指定的列外,将忽略行。 (PK1,PK2)
输出