【问题标题】:MySQL IF NOT EXISTS / IFNULL SELECT other columnMySQL IF NOT EXISTS / IFNULL SELECT 其他列
【发布时间】:2012-06-08 20:02:57
【问题描述】:

我想检查一个列(mysql)是否存在。如果没有,mysql 应该从肯定存在的列中获取值。我的查询看起来像这样,但它不起作用:

IF NOT EXISTS (SELECT `en` FROM `HP_strings` 
               WHERE `name`='copyright' AND `group`='system')
THEN
    SELECT `default` FROM `HP_strings` 
    WHERE `name`='copyright' AND `group`='system';

我也试过

IFNULL((SELECT `en` FROM `HP_strings` 
        WHERE `name`='copyright' AND `group`='system'),
(SELECT `default` FROM `HP_strings` 
 WHERE `name`='copyright' AND `group`='system'));

相同的结果(错误)

编辑:'en' 不存在。我想知道它是否存在。

【问题讨论】:

  • 需要澄清:您真的要检查列是否存在,或者列值是否为NULL
  • 如果它存在。没有“en”列。
  • 不要那样做。我认为这是不可能的。
  • @user1435792,你的意思是没有名为en的列,你真的想检查你的表中是否存在任何列en
  • @user1435792,我已经编辑了我的帖子;看看这是否有帮助。

标签: mysql select if-statement exists ifnull


【解决方案1】:

试试这个:

SELECT `default` FROM `HP_strings` where isnull(`en`) and `name`='copyright' 
AND `group`='system'

编辑:(根据您的评论)

您可以从 DB 架构检查表中是否确实存在列,如下所示...但我认为您不能像您打算的那样在查询中进行操作。

SELECT *  FROM information_schema.COLUMNS  
WHERE TABLE_SCHEMA = 'db_name'  
AND TABLE_NAME = 'table_name'  
AND COLUMN_NAME = 'column_name' 

【讨论】:

  • #1054 - 'where 子句'中的未知列'en'
  • @user1435792,已根据您的帖子数据给出了解决方案。根据您的帖子en 必须是一列。那么,en 实际上是什么?
  • 它是一个列。但它不存在。我想检查一下这个专栏是否真的存在。因为有人可以创建一个列“en”,然后应该使用该列的值。
  • @user1435792,你应该在帖子中清除它。看看我的编辑......如果它对你有帮助。
【解决方案2】:

要检查 MySQL 中的表结构,您必须查询 information_schema 数据库。为此,您的 db 用户必须有权访问该系统数据库(普通用户不应该拥有)。

我不知道您要做什么,但您可能应该重新考虑您的数据库结构,这样就不需要检查表中是否存在列。

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2011-11-15
    • 2021-10-20
    • 1970-01-01
    • 2013-09-17
    • 2016-05-12
    • 2015-11-04
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多