【问题标题】:ALTER TABLE WHERE ClauseALTER TABLE WHERE 子句
【发布时间】:2014-10-13 02:58:16
【问题描述】:

我并不精通 DDL。我假设它们是ALTERWHERE 子句,经过一些研究,我现在明白ALTER 命令不存在WHERE 子句。如何处理可能需要检查ALTER 命令中的某些条件的情况?

Mysql Drop column where all row value is null

例如,对于上面的问题,如果我想写类似下面的代码,我该怎么做?

ALTER TABLE my_table DROP col
WHERE NOT EXISTS (SELECT * FROM my_table
                    WHERE col IS NOT NULL)

有没有标准的 SQL 方法来实现这一点?如果没有,任何人都可以为各种数据库(SQL Server、MySQL、Oracle、PostgreSQL)提供方法吗?

【问题讨论】:

  • 在SQL server的情况下需要使用t-SQL的if条件来完成
  • 您要针对什么类型的数据库运行此程序?它们都有不同的语法
  • 如果你能提供一个包含各种语法的答案,比如this answer

标签: sql alter-table


【解决方案1】:

您不能只删除表中某些行的列。该表要么有列,要么没有。这就是为什么ALTER 没有WHERE 子句的原因。

只有当表中的所有值都是NULL 时,您才希望删除此列。您需要的是IF 声明。

更新:

SELECT CASE 
    WHEN NOT EXISTS (SELECT * FROM my_table WHERE col IS NOT NULL)
        THEN 'Y'
    ELSE 'N'
END AS my_result

IF my_result = 'Y'
    ALTER TABLE...

【讨论】:

  • 我明白为什么ALTER 没有WHERE 子句,这不是我的问题。
  • 你能用上面提到的IF语句添加一个例子吗?
  • 感谢代码。您可以添加代码适用于哪些数据库吗?
  • IF 不起作用。 '您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 'IF my_result = 'Y'' 附近使用的正确语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2021-01-22
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多