Sql 如何从具有多个依赖项的表中删除列?
所以我有一张桌子,它的结构和这个相似Sql 如何从具有多个依赖项的表中删除列?,sql,dependencies,Sql,Dependencies,所以我有一张桌子,它的结构和这个相似 group_id | code |code_type 1 45 '9' 2 56 '0' 3 56 'NA' 4 32 'NA' 问题是,对于同一个代码,我有多个代码类型,但这没关系,但当有“NA”时,我想将其从表中删除,因为显然我们有另一个代码类型来指定该代码。所以我们不需要那个“NA”。希望这是有意义的,如果需要的话,我很乐意澄清。因
group_id | code |code_type
1 45 '9'
2 56 '0'
3 56 'NA'
4 32 'NA'
问题是,对于同一个代码,我有多个代码类型,但这没关系,但当有“NA”时,我想将其从表中删除,因为显然我们有另一个代码类型来指定该代码。所以我们不需要那个“NA”。希望这是有意义的,如果需要的话,我很乐意澄清。因此,当所有的话都说了,我们将删除第3行,并保留其余的 如果要删除“NA”值,只需执行以下操作:
delete from t
where code = 'NA';
如果要删除“NA”值,只需执行以下操作:
delete from t
where code = 'NA';
您可以在Gordon的查询中添加一个检查,以确保只删除具有合法值的行:
delete from <your table>
where code_type = 'NA'
and code in (select distinct code from <your_table> where code_type <> 'NA')
您可以在Gordon的查询中添加一个检查,以确保只删除具有合法值的行:
delete from <your table>
where code_type = 'NA'
and code in (select distinct code from <your_table> where code_type <> 'NA')
怎么样
delete from t
where code_type = 'NA'
and exists (
select null
from t t1
where t1.code = t.code
and t1.code_type <> 'NA'
)
当然,您可以用select*替换delete,以查看这将删除哪些行。如何
delete from t
where code_type = 'NA'
and exists (
select null
from t t1
where t1.code = t.code
and t1.code_type <> 'NA'
)
当然,您可以将delete替换为select*,以查看这将删除哪些行。您不清楚同一代码是否可以存在除“NA”以外的多个值,但是下面的CTE使用行号窗口功能来识别模式,然后在CTE外部使用DELETE语句删除所有标记的行 );以CTE为例 从Foo中选择*,按代码顺序按组标识划分的行号
选择*FROM CTE WHERE Flag>1您不清楚同一代码是否可以存在除“NA”以外的多个值,但是下面的CTE使用一个行号窗口函数来标识模式,然后在CTE外部使用DELETE语句来删除任何被标记的行 );以CTE为例 从Foo中选择*,按代码顺序按组标识划分的行号
选择*FROM CTE WHERE Flag>1我不想删除所有的“NA”列,只想删除代码类型可能是相同代码的其他行。因此,如果一个代码只有一个代码类型,那就是'NA',那么我想保留它,这有意义吗?我不想删除所有的'NA'列,只是删除代码类型可以是同一代码的其他类型的行。因此,如果一个代码只有一种代码类型,那就是“NA”,那么我想保留它,这有意义吗?谢谢,现在我看到了,我觉得问这个问题很傻,只是需要一个子查询。谢谢,现在我看到了,我觉得问这个问题很傻,只是需要一个子查询。只是一点术语更正:你在删除行,而不是列。如果您真的想从表中删除列,drop将是一个更合适的术语。只需进行一点术语更正:您删除的是行,而不是列。如果你真的想从表中删除列,drop将是一个更合适的术语。是的,那么“NA”是我唯一想删除的,如果有其他代码类型使用相同的代码,那么可以保留它们。是的,那么“NA”是我唯一想删除的,如果有其他代码类型使用相同的代码,那么可以保留它们。