是否可以在带有MySQL的SELECT语句中使用带有*的IFNULL()?如果没有,我的替代方案是什么?

时间:2013-10-14 18:24:47

标签: mysql sql stored-procedures

以下是我目前在SELECT声明中使用的内容:

SELECT
    movieitemdetails.barcode,
    IFNULL(movieitemdetails_custom.title, movieitemdetails.title) AS title
FROM
...

问题是我需要让我的SQL在列名和列数方面更具动态性。我需要使用*来动态撤回所有行。这是一些示例伪代码,向您展示我需要的东西:

IFNULL(movieitemdetails_custom.*, movieitemdetails.*) AS *

我需要它来恢复每个表上具有相同名称的所有列并进行IFNULL比较。显然上面的代码不正确。

有没有人对如何制作涉及*的动态内容有任何想法?

请注意某些人:请不要谴责我不应该如何使用*。我知道一般情况下不推荐使用它,但在这个特定的项目中,它就是我们的目标。

2 个答案:

答案 0 :(得分:2)

不,IFNULL()函数只接受两个标量表达式,而不是像*那样的通配符表达式。

为了使此查询更具动态性,您可以选择:

  • 使用应用程序代码构建查询,为每对这样的列附加IFNULL()表达式。然后提交查询。

或者:

  • 使用SELECT * ...独立获取所有列,然后排除在应用程序代码中使用哪些列。

答案 1 :(得分:0)

您必须单独执行每个列,如下所示:

SELECT
    movieitemdetails.barcode,
    IFNULL(movieitemdetails_custom.title, movieitemdetails.title) AS title
    IFNULL(movieitemdetails_custom.col2, movieitemdetails.col2) AS col2
    IFNULL(movieitemdetails_custom.col3, movieitemdetails.col3) AS col3
FROM
...

不确定你的意思是让它在列数量方面更具动态性但是...... SELECT语句不能有可变数量的列,所以如果你想要这种行为,你需要使用存储过程或构建你的SQL动态。