SQL - 用并集重复一行

SQL - Repeat a row with union

我有一个测试 table 有 4 行 (id, fsn, owner, IR, NI)

id: 1, fsn: 123, owner: jones, IR: 1000, NI: 2350
id: 2, fsn: 345, owner: smith, IR: 0, NI: 50
id: 3, fsn: 567, owner: casey, IR: 200, NI: 0,
id: 4, fsn: 789, owner: brown, IR: 400, NI: 0

我需要在 IR/NI 字段上拆分它们,以便我为每个 IR 和 NI 字段都有一个不为 0 的记录,因为我需要使用连接等分别处理每种类型。所以我的最终输出此时应该

id: 2, fsn: 345, owner: smith, IR: 0, NI: 50
id: 3, fsn: 567, owner: casey, IR: 200, NI: 0,
id: 4, fsn: 789, owner: brown, IR: 400, NI: 0,
id: 1, fsn: 123, owner: jones, IR: 1000, NI: 2350,
id: 1, fsn: 123, owner: jones, IR: 1000, NI: 2350

我认为下面的代码会完成拆分,但它不会像我需要的那样重复该行。

SELECT *
FROM farms
WHERE IR != 0

UNION

SELECT *
FROM farms
WHERE NI != 0

您可以在一个查询中同时进行这两项检查。

SELECT *
FROM farms
WHERE  NI != 0 or IR != 0

我不太清楚为什么你要将这一行加倍,但有一个简单的方法可以解决它:使用 union all 集合运算符,它的作用类似于 union 运算符,但是不删除重复项:

SELECT *
FROM farms
WHERE IR != 0

UNION ALL  -- Here!

SELECT *
FROM farms
WHERE NI != 0