代码之家  ›  专栏  ›  技术社区  ›  user213154

柱的存在性测试

  •  1
  • user213154  · 技术社区  · 16 年前

    说我不确定是否有桌子 t 在数据库中 d 有专栏 x 或者没有。也许这是因为应用程序使用的某些数据库已经升级,而有些没有升级,所以有些已经升级 t.x 而有些则不然。

    现在假设我只需要一个简单的查询就可以从 d.t 我想要的是 d.t.x 如果列存在,则为默认值。

    我知道如何处理两个查询,其中第一个查询查找if列 X 存在,应用程序相应地调整第二个查询。但是,我可以将这个逻辑移入SQL并在一个查询中执行它吗?如果有一个 COLUMN_EXISTS() 函数,那么查询将是:

    SELECT s, t, IF(COLUMN_EXISTS(x), x, 'NO_COL_x') AS x FROM d.t ...;
    
    3 回复  |  直到 16 年前
        1
  •  7
  •   Eric Petroelje    16 年前

    以下是您感兴趣的问题:

    IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = ‘tablename’ AND COLUMN_NAME = ‘column’)
    

    您可以将其包装在一个以表名和列名为参数的函数中,然后在查询中使用它。

    但是,仍然不确定这是否可行,因为查询可能仍然因引用查询中的非现有列而出错(即使如果该列不存在,if也始终返回false)

    另一种选择是使用该函数动态构建查询,而不是在查询本身中尝试使用它。但这当然会变得更加复杂。

    最后,最好的方法是使用存储过程,而不是将查询放入代码中。这样,当数据库升级时,存储过程也将得到“升级”,以匹配新的模式,您不必担心(同样)代码版本是否与数据库版本匹配。

        2
  •  1
  •   Matthew Farwell    16 年前

    有一个视图信息“schema.columns”,其中包含表列和列名称。如果需要查看表中是否存在列,可以从中进行选择。

        3
  •  1
  •   Vadim K.    16 年前

    您可能正在查找:

    SHOW COLUMNS FROM my_table LIKE 'my_column'