meninggalkan tabel gabung pada dirinya sendiri sql

Saya punya pertanyaan sql sederhana di sini, saya melihat beberapa pertanyaan seperti ini:

SELECT 
    users.id, users.username, users.password
FROM
    users AS User
        LEFT JOIN
    users AS User0 ON ...
        LEFT JOIN
    users AS User1 ON ...
        LEFT JOIN
    users AS User2 ON ...
WHERE
    ...
ORDER BY ... DESC

Di mana, seperti yang Anda lihat di atas, tabel yang sama users digabungkan ke kiri sebanyak 3 kali. Pertanyaan saya adalah, mengapa seseorang ingin bergabung dengan meja itu sendiri? Apa sebenarnya tujuan melakukan hal seperti itu?

Tolong beri saya penjelasan terbaik dengan contoh yang jelas jika memungkinkan

Terima kasih


person user765368    schedule 20.02.2013    source sumber
comment
Misalnya, coba google running total.   -  person Hamlet Hakobyan    schedule 21.02.2013


Jawaban (3)


Ini biasanya dilakukan ketika Anda memiliki hierarki.

Katakanlah sebuah tabel karyawan dimana setiap karyawan memiliki seorang manajer - manajer tersebut ditandai dengan bidang ManagerId yang merupakan ID karyawan manajer.

Jika Anda ingin melihat setiap karyawan, manajer mereka, manajer manajer, dll, bergabung sendiri akan menjadi cara untuk menulis kueri.

person Oded    schedule 20.02.2013

Misalkan Anda ingin melacak pengguna, serta siapa yang merujuk mereka ke situs Anda. Anda mungkin mendesain tabel untuk menyimpan pengguna seperti ini:

create table users (
    id int unsigned primary key auto_increment,
    name varchar(100),
    ...
    referredby int unsigned
);

Jika Anda kemudian ingin melihat pengguna dan siapa yang merujuk mereka, Anda perlu menggabungkan kolom yang dirujuk oleh pengguna ke kolom id orang yang merujuk mereka. yaitu.:

SELECT u.name user, r.name referrer
    FROM users u LEFT JOIN users r ON u.referredby = r.id

Jadi itu sebabnya Anda melakukannya.

person DiMono    schedule 20.02.2013

Jika Anda memiliki hubungan hierarki, Anda dapat menggabungkan tabel ke tabel itu sendiri, berikut adalah contoh skema dan kueri:

CREATE TABLE category (
      id int NOT NULL auto_increment,
          primary key(id),
      category_name varchar(64) NOT NULL,
      parent_category_id int DEFAULT NULL,
          foreign key(parent_category_id) references category(id)
) engine=innodb;

Katakanlah Anda memiliki toko yang memiliki berbagai kategori produk. Katakanlah dalam contoh ini Anda menelusuri kategori dan Anda ingin menampilkan semua kategori di bawah kategori induknya:

 SELECT parent_category.id AS parent_category_id, 
        parent_category.category_name AS parent_category_name,
        child_category.id AS category_id,
        child_category.category_name AS category_name
 FROM
        category AS parent_category
        LEFT OUTER JOIN category AS child_category ON child_category.parent_category_id = parent_category.id;

Dalam hal ini Anda akan mendapatkan semua kategori anak beserta infonya tentang kategori induk. Pola ini sering digunakan untuk menyimpan struktur hierarki dalam database relasional.

person hsanders    schedule 20.02.2013