Bagaimana untuk mendapatkan hanya baris pertama dari LEFT JOIN untuk setiap entri jadual kiri?

Mary-Kate Olsen
Lepaskan: 2024-11-05 14:27:02
asal
267 orang telah melayarinya

How to retrieve only the first row from a LEFT JOIN for each left table entry?

Mendapatkan Baris Pertama dari LEFT JOIN

Dalam SQL, melakukan LEFT JOIN biasanya menghasilkan berbilang baris untuk jadual kiri, satu untuk setiap baris yang sepadan dalam jadual kanan. Walau bagaimanapun, dalam senario tertentu, anda mungkin perlu mendapatkan hanya baris pertama untuk jadual kiri.

Struktur Pangkalan Data Ringkas

Pertimbangkan struktur pangkalan data yang dipermudahkan berikut:

  • Suapan

    id |  title | content
    ----------------------
    1  | Feed 1 | ...
    Salin selepas log masuk
  • Artis

    artist_id | artist_name
    -----------------------
    1         | Artist 1
    2         | Artist 2
    Salin selepas log masuk
  • 🎜>
  • feeds_artists

    rel_id | artist_id | feed_id
    ----------------------------
    1      |     1     |    1 
    2      |     2     |    1 
    ...
    Salin selepas log masuk

Percubaan Awal dan Hadnya

Untuk mengekstrak artikel dan sertakan sahaja artis pertama untuk setiap suapan, LEFT JOIN biasanya digunakan. Pertanyaan berikut mewakili percubaan awal:

SELECT *
    FROM feeds 
    LEFT JOIN feeds_artists ON wp_feeds.id = (
        SELECT feeds_artists.feed_id FROM feeds_artists
        WHERE feeds_artists.feed_id = feeds.id 
    LIMIT 1
    )
WHERE feeds.id = '13815'
Salin selepas log masuk
Pertanyaan ini bertujuan untuk mendapatkan hanya baris pertama jadual feeds_artis untuk setiap ID suapan. Walau bagaimanapun, ia gagal berfungsi dengan berkesan.

Penyelesaian

Untuk berjaya mengeluarkan hanya artis pertama untuk setiap suapan, pertanyaan berikut boleh digunakan:

SELECT *
  FROM feeds f
  LEFT JOIN artists a ON a.artist_id = (
    SELECT artist_id
    FROM feeds_artists fa 
    WHERE fa.feed_id = f.id
    LIMIT 1
  )
Salin selepas log masuk
Dalam pertanyaan yang disemak ini, subkueri memastikan bahawa nilai artis mewakili baris pertama dalam jadual feeds_artis untuk setiap ID suapan. Klausa LIMIT 1 memainkan peranan penting dalam memilih baris pertama sahaja.

Penyelesaian Alternatif untuk Menambah ID

Jika andaian boleh dibuat bahawa ID artis meningkat dari semasa ke semasa , penyelesaian alternatif dibentangkan:

SELECT *
  FROM feeds f
  LEFT JOIN artists a ON a.artist_id = (
    SELECT MIN(fa.artist_id) a_id
    FROM feeds_artists fa 
    WHERE fa.feed_id = f.feed_id
  )
Salin selepas log masuk
Di sini, subkueri MIN(artist_id) mengembalikan ID artis dengan nilai terendah, dengan mengandaikan bahawa ini sepadan dengan artis terawal.

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan hanya baris pertama dari LEFT JOIN untuk setiap entri jadual kiri?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!