0

以下是我目前在一份SELECT声明中的工作:

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

问题是当涉及到列名和我拥有的列数量时,我需要让我的 SQL 更加动态。我需要使用*动态拉回所有行。这是一些示例伪代码,向您展示我需要什么:

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

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

有没有人对如何使我的参与更具活力有任何想法*

对某些人的注意:请不要对我不应该使用*. 我知道一般不推荐使用它,但在这个特定的项目中,这是我们要使用的。

4

2 回答 2

2

No, the IFNULL() function accepts only two scalar expressions, not wildcard expressions like *.

To make this query more dynamic, your options are:

  • Build the query with application code, appending an IFNULL() expression for each such pair of columns. Then submit the query.

Or:

  • Fetch all the columns independently with SELECT * ... and then sort out which ones to use in application code.
于 2013-10-14T18:33:37.833 回答
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 .

于 2013-10-14T18:34:49.867 回答