Saya kira alasannya adalah mereka tidak menganggap ini sebagai fitur prioritas yang layak untuk diterapkan. Sepertinya Postgres ada dukung keduanya
UNION dan UNION ALL .
Jika Anda memiliki alasan kuat untuk fitur ini, Anda dapat memberikan masukan di Hubungkan (atau apa pun URL penggantinya).
Mencegah duplikat ditambahkan dapat berguna karena baris duplikat yang ditambahkan di langkah selanjutnya ke baris sebelumnya hampir selalu berakhir dengan loop tak terbatas atau melebihi batas rekursi maksimum.
Ada beberapa tempat di Standar SQL
di mana kode digunakan menunjukkan UNION seperti di bawah ini
Artikel ini menjelaskan bagaimana mereka diimplementasikan di SQL Server . Mereka tidak melakukan hal seperti itu "di bawah tenda". Spool tumpukan menghapus baris saat berjalan sehingga tidak mungkin untuk mengetahui apakah baris selanjutnya adalah duplikat dari yang dihapus. Mendukung UNION akan membutuhkan pendekatan yang agak berbeda.
Sementara itu, Anda dapat dengan mudah mencapai hal yang sama dalam TVF multi-pernyataan.
Untuk mengambil contoh konyol di bawah ini (Postgres Fiddle )
WITH R
AS (SELECT 0 AS N
UNION
SELECT ( N + 1 )%10
FROM R)
SELECT N
FROM R
Mengubah UNION ke UNION ALL dan menambahkan DISTINCT pada akhirnya tidak akan menyelamatkan Anda dari rekursi tak terbatas.
Tetapi Anda dapat menerapkan ini sebagai
CREATE FUNCTION dbo.F ()
RETURNS @R TABLE(n INT PRIMARY KEY WITH (IGNORE_DUP_KEY = ON))
AS
BEGIN
INSERT INTO @R
VALUES (0); --anchor
WHILE @@ROWCOUNT > 0
BEGIN
INSERT INTO @R
SELECT ( N + 1 )%10
FROM @R
END
RETURN
END
GO
SELECT *
FROM dbo.F ()
Di atas menggunakan IGNORE_DUP_KEY untuk membuang duplikat. Jika daftar kolom terlalu lebar untuk diindeks, Anda memerlukan DISTINCT dan NOT EXISTS alih-alih. Anda juga mungkin menginginkan parameter untuk mengatur jumlah maksimum rekursi dan menghindari pengulangan tak terbatas.
