动态地向SQL结果集添加行

时间:2013-04-13 06:04:54

标签: mysql sql stored-procedures

我写了一个SP来检索结果集。因此,以下SQL部分将为我提供我想要的结果集:

SELECT *
FROM `temp_table` JOIN `mytable` ON `mytable_ID` = `temp_table_tmp_id`
WHERE CEILING(`tmp_idx`/int_page_size) = p_page_no

现在,我需要在上面的结果集中添加一个动态行,因此,我尝试了以下内容:

SELECT *
FROM `temp_table` JOIN `mytable` ON `mytable_ID` = `temp_table_tmp_id`
WHERE CEILING(`tmp_idx`/int_page_size) = p_page_no
UNION ALL
SELECT DISTINCT `ID`, `temp_table_tmp_id`,`Name`, 100, `Type`,`Description`
ORDER BY `tmp_idx`; 

但是这会在“UNION ALL”之后的SELECT语句中定义的每个字段中给出“字段列表中的未知列'tmp_idx'”错误。我将“100”作为值应该在结果集中指出。我希望这对我想要达到的目标足够清楚。请告诉我如何纠正/实现这一目标?

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试使用撇号(即')代替back-tick(`)来分隔动态行中的列标题。此外,您必须将所有数字列转换为基本查询中的格式化字符串。

要控制排序,以便强制人工行最后出现,请为数据行添加另一列sequence,其中硬编码值为0,动态行为1。然后在ORDER BY的前面添加这个新列sequence。 (在某些SQL方言中,有必要通过序号而不是名称来标识此列,或者添加包含order by子句的包装查询。)