Bergabunglah dengan dua tabel dan kembalikan hanya satu baris dari tabel kedua

Saya punya dua meja. Kedua tabel berisi ID yang dapat digunakan untuk menggabungkan keduanya. Namun, tabel 2 dapat memiliki more than one row for the same ID. Tabel 1 akan selalu memiliki satu baris.

Misalnya, table 1 berisi 60.000 baris. Ketika saya melakukan gabungan dalam kiri dengan table2 ia mengembalikan ~171.000 baris.

Apa yang ingin saya capai adalah mengembalikan baris pertama dari tabel 2 sehingga ketika saya menggabungkannya saya tidak membuat catatan duplikat.

Saya tidak yakin apakah ini pendekatan yang benar tetapi inilah yang saya coba:

SELECT I.*, a.Name from table 1 I 
INNER JOIN (SELECT MIN (a.ID), a.NAME FROM table 2 group by a.ID) as a 
on I.ID = a.ID

Saya mendapatkan kesalahan berikut:

Sintaks yang salah di dekat 'i'.

Adakah saran tentang bagaimana saya dapat memperbaikinya? Atau mendapatkan hasilnya dengan cara yang berbeda?


person smr5    schedule 15.10.2014    source sumber
comment
meja 1 ini punya ruang ini? antara 'tabel' dan '1' dalam kueri Anda? satukan 1 dengan tabel atau hapus untuk menghilangkan kesalahan yang Anda jelaskan..   -  person Deiwys    schedule 16.10.2014
comment
Sepertinya Anda memerlukan alias untuk MIN(a.ID) di tabel turunan Anda. Secara teknis tidak ada kolom ID di kumpulan hasil itu.   -  person Dave Johnson    schedule 16.10.2014
comment
Saya juga tidak melihat satu huruf kecil pun i dalam kode itu sama sekali.   -  person Aaron Bertrand    schedule 16.10.2014


Jawaban (1)


Sesuatu seperti ini akan menjamin satu baris per id dari tabel kedua Anda.

;WITH singleRows AS (
SELECT
    *
    , ROW_NUMBER() OVER (PARTITION BY id ORDER BY name) as rownum
FROM
    table_2)

SELECT
    *
FROM
    table_1 t1

    JOIN singleRows t2
        ON t1.id = t2.id
        AND t2.rownum = 1
person Ryan B.    schedule 15.10.2014
comment
Terima kasih! Itulah yang saya cari. - person smr5; 16.10.2014
comment
Ini hampir berhasil tetapi karena alasan tertentu, Jika table_2 memiliki 50 entri untuk satu entri di table_1. Kueri menampilkan 50 entri dengan data yang sama. - person Si8; 13.11.2020