因此有delete col from table
删除单个列。我想我可以使用over
删除多个列。但是:
我不确定这是否有效。
我不太确定如何在这里正确使用。这样的事情不起作用:{delete y from x}/[t;`name`job]
答案 0 :(得分:3)
您可以使用与选择多列相同的方式删除多个列。
delete col1,col2 from table
在这种情况下使用它肯定会效率低下。
但是,您可能希望将列名作为符号传递给执行select或delete的函数。
为此,需要使用delete的功能形式:https://code.kx.com/q/ref/funsql/
功能删除的例子
q)table:([]col1:1 2 3;col2:1 2 3;col3:10 20 30)
q)//functional delete
q){![table;();0b;x]} `col1`col2
col3
----
10
20
30
q)//inplace functional delete
q){![`table;();0b;x]} `col1`col2
`table
q)table
col3
----
10
20
30
答案 1 :(得分:3)
对于内存中的表格,您还可以使用drop:http://code.kx.com/q/ref/lists/#_-drop
q)((),`col1)_table
col2 col3
---------
1 10
2 20
3 30
q)((),`col1`col3)_table
col2
----
1
2
3
q)((),`)_table
col1 col2 col3
--------------
1 1 10
2 2 20
3 3 30
答案 2 :(得分:0)
我不能在etc211的解决方案下面发表评论,所以我刚开始另一个答案。
Hmm, functional delete doesn't seem to work when the list of columns is empty. I'd expect that not to touch the table at all, and yet it deletes all the rows in it instead.
对于上述内容,为什么不创建一个选择您愿意删除的列的函数?
让我们假设你的表t包含列名:col1,col2,col3,col4
并且您要删除:col5,col6
:
tgt_cols:`col5`col6;
filtered_cols: (cols t) inter tgt_cols;
if[0 < count filtered_cols;
{![`t;();0b;x]} filtered_cols];
上面将首先检查是否存在要删除的列;如果存在目标列到删除,它将删除这些列。