以下是我目前在SELECT
声明中使用的内容:
SELECT
movieitemdetails.barcode,
IFNULL(movieitemdetails_custom.title, movieitemdetails.title) AS title
FROM
...
问题是我需要让我的SQL在列名和列数方面更具动态性。我需要使用*
来动态撤回所有行。这是一些示例伪代码,向您展示我需要的东西:
IFNULL(movieitemdetails_custom.*, movieitemdetails.*) AS *
我需要它来恢复每个表上具有相同名称的所有列并进行IFNULL
比较。显然上面的代码不正确。
有没有人对如何制作涉及*
的动态内容有任何想法?
请注意某些人:请不要谴责我不应该如何使用*
。我知道一般情况下不推荐使用它,但在这个特定的项目中,它就是我们的目标。
答案 0 :(得分:2)
不,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动态。