我正在用 Ruby 编写一个函数来从多个表中提取数据,然后将这些值插入到“主”表中。问题是并非所有表都具有相同的架构。具体来说,一些表有“列 X”,而另一些则缺少它。如何使用相同的查询从两个表中选择数据,同时处理该列可能存在或不存在的事实?我尝试了以下 CASE,但它似乎不起作用:
select case
when column_x is not null then sum(column_x)
else null
end case
我正在用 Ruby 编写一个函数来从多个表中提取数据,然后将这些值插入到“主”表中。问题是并非所有表都具有相同的架构。具体来说,一些表有“列 X”,而另一些则缺少它。如何使用相同的查询从两个表中选择数据,同时处理该列可能存在或不存在的事实?我尝试了以下 CASE,但它似乎不起作用:
select case
when column_x is not null then sum(column_x)
else null
end case
如果它们不同,则不能对所有表使用相同的查询。
一个简单的解决方案是将列 X 添加到其他表中,并在其中保留空值。当您SUM(column_x)
在查询中写入时,它将NULL
针对这些表。
否则,如果您使用 a 组合所有表UNION
,则可NULL
以为这些表添加:
SELECT column_x, column_y, column_z FROM table1
UNION
SELECT NULL, column_y, column_z FROM table2
如果您从 Ruby 执行单独的查询,则可以根据表名对其进行条件化。当它创建从带有 no 的表之一读取的查询时column_x
,它可以添加NULL column_x
到SELECT
子句中,以便处理结果的代码不需要区分表。