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
我有一个测试 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