我最近遇到了一个很早以前就为informix数据库编写的查询。这个问题在我看来有点奇怪和无稽之谈。
我知道这个查询返回 city table
与 ocw table
. 如果没有记录 city
出现在 ocw table
,返回 code column
为了这个 city has a NULL
价值观。
我也明白 UNION
删除重复项,而 UNION ALL
没有。
我的理解是 outer
以及 union all
对的?
有人能解释一下他们用这个查询想要达到什么目的吗?有没有更好的方法?
SELECT * FROM city as c, OUTER ocw o
WHERE c.mutual = o.code
INTO temp city_ocw;
SELECT
name ,
year ,
mutual ,
0 animalId
FROM
city_ocw
WHERE
code IS NULL
GROUP BY
1, 2, 3 , 4
UNION ALL
SELECT
name ,
year ,
mutual ,
animalId
FROM
city_ocw
WHERE
NOT code IS NULL
GROUP BY
1, 2, 3 , 4
INTO TEMP city_ocw_final ;
1条答案
按热度按时间h7wcgrx31#
@我是对的,当结果集只有4列时,按5列进行分组没有多大意义,但我将忽略这一点。
在我看来,你对
OUTER
以及UNION ALL
是正确的。目标似乎是生成一个叠加结果集,其中2个版本的city加入了ocw,1个版本具有实际的animalid,1个版本的animalid=0。我不熟悉
OUTER
被自己使用(我总是和它一起使用)LEFT/RIGHT/FULL
),但会假定默认为LEFT OUTER
.如果ocw表中没有某个城市的记录,则该城市的返回代码列具有空值。
那是真的,但是
WHERE c.mutual = o.code
这就不重要了。你可以把连接重写为LEFT JOIN ocw o ON c.mutual = o.code
这个GROUP BY
可能是过去对某个不再存在的聚合列执行的操作。。。也许是第五栏?我认为可以重做为: