Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menghapuskan Nombor Pesanan Pendua Apabila Menyertai Jadual dengan Item Baris Berbilang?

Bagaimana untuk Menghapuskan Nombor Pesanan Pendua Apabila Menyertai Jadual dengan Item Baris Berbilang?

Linda Hamilton
Lepaskan: 2025-01-17 06:21:09
asal
157 orang telah melayarinya

How to Eliminate Duplicate Order Numbers When Joining Tables with Multiple Line Items?

Mengelakkan Nombor Pesanan Pendua dalam Gabungan Item Berbilang Baris

Pangkalan data bergabung yang melibatkan jadual dengan berbilang item baris bagi setiap pesanan selalunya membawa kepada nombor pesanan pendua dalam keputusan. Artikel ini meneroka penyelesaian yang cekap untuk mendapatkan hanya satu rekod bagi setiap pesanan unik.

Pendekatan Awal dan Kekurangannya

Pendekatan mudah mungkin melibatkan memilih item baris "TOP 1" sahaja. Walau bagaimanapun, ini gagal disebabkan oleh pengehadan dalam mengakses terus jadual luar dari dalam pernyataan pilih dalam.

Penyelesaian Cekap: SALANG GUNA

Pengendali CROSS APPLY menyediakan penyelesaian yang elegan:

<code class="language-sql">SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2</code>
Salin selepas log masuk

CROSS APPLY cekap mendapatkan semula item baris pertama untuk setiap pesanan, menghalang nombor pesanan pendua.

Alternatif untuk Versi Pelayan SQL Lama: INNER JOIN

Untuk versi SQL Server sebelum 2005, INNER JOIN menawarkan penyelesaian yang setanding:

<code class="language-sql">SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )</code>
Salin selepas log masuk

Memastikan Keputusan Deterministik

Yang penting, TOP 1 tanpa klausa ORDER BY adalah bukan penentu. Item baris yang dipilih mungkin berbeza antara pelaksanaan pertanyaan, walaupun dengan data yang tidak berubah. Sentiasa masukkan klausa ORDER BY dalam pertanyaan dalaman untuk menjamin hasil yang konsisten.

Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan Nombor Pesanan Pendua Apabila Menyertai Jadual dengan Item Baris Berbilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan