Bagaimana untuk memadam pasangan yang dipilih ke dalam jadual sendiri
P粉432930081
P粉432930081 2024-04-01 16:39:46
0
2
478

Saya sendiri telah menyertai jadual dan saya mempunyai pasangan pendua yang diserlahkan dalam imej di bawah, bagaimana saya boleh memadamkannya?

select DISTINCT A.name as name1 , B.name as name2
from (select name , ratings.* from reviewers inner join ratings on reviewers.id = 
ratings.reviewer_id ) A ,
(select name , ratings.* from reviewers inner join ratings on reviewers.id = 
ratings.reviewer_id ) B
where A.reviewer_id <> B.reviewer_id 
and A.book_id = B.book_id
order by name1 , name2 ASC
Nama 1 Nama 2
Alice Lewis Elizabeth Blake
Chris Thomas John Smith
Chris Thomas Mike White
Elizabeth Blake Alice Lewis
Elizabeth Blake Jack Green
Jack Green Elizabeth Blake
Joe Martinez Mike Anderson
John Smith Chris Thomas
Mike Anderson Joe Martinez
Mike White Chris Thomas

Jadual di atas pernah menjadi gambar

P粉432930081
P粉432930081

membalas semua(2)
P粉481366803

Anda boleh melakukan ini

select Name1, Name2
from ...
where Name1 < Name2;

Lihat contoh ini

P粉141035089

Saya telah mencipta pernyataan DDL dan DML untuk menghasilkan semula pangkalan data dan pertanyaan bertulis untuk mendapatkan pasangan unik. Berikut ialah kod "bina" yang mungkin membantu orang lain:

CREATE TABLE books (
  id INT PRIMARY KEY,
  title VARCHAR(100)
);

CREATE TABLE reviewers (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

CREATE TABLE ratings (
  id INT PRIMARY KEY,
  reviewer_id INT,
  book_id INT,
  rating INT,
  FOREIGN KEY (reviewer_id) REFERENCES reviewers(id),
  FOREIGN KEY (book_id) REFERENCES books(id)
);

-- Inserting sample records
INSERT INTO reviewers (id, name)
VALUES
  (1, 'Alice Lewis'),
  (2, 'Elizabeth Black'),
  (3, 'Chris Thomas'),
  (4, 'John Smith'),
  (5, 'Mike White'),
  (6, 'Jack Green'),
  (7, 'Joe Martinez'),
  (8, 'Mike Anderson');

INSERT INTO books (id, title)
VALUES
  (1, 'The Gulag Archipelago'),
  (2, 'One Day in the Life of Ivan Denisovich'),
  (3, 'Cancer Ward');

-- Insertion of rating records
INSERT INTO ratings (id, reviewer_id, book_id, rating)
VALUES
  (1, 1, 1, 4),
  (2, 1, 2, 3),
  (3, 2, 1, 5),
  (4, 2, 2, 4),
  (5, 2, 3, 2),
  (6, 3, 1, 3),
  (7, 3, 3, 4),
  (8, 4, 1, 2),
  (9, 4, 3, 3),
  (10, 5, 2, 5),
  (11, 6, 1, 1),
  (12, 6, 2, 3),
  (13, 6, 3, 4),
  (14, 7, 1, 3),
  (15, 7, 2, 4),
  (16, 8, 3, 2);

Ini adalah pertanyaan yang difaktorkan semula:

SELECT DISTINCT
  A.name AS name1,
  B.name AS name2
FROM
  (
    SELECT
      reviewers.id,
      reviewers.name,
      ratings.book_id
    FROM
      reviewers
      INNER JOIN ratings ON reviewers.id = ratings.reviewer_id
  ) A
  JOIN (
    SELECT
      reviewers.id,
      reviewers.name,
      ratings.book_id
    FROM
      reviewers
      INNER JOIN ratings ON reviewers.id = ratings.reviewer_id
  ) B ON A.book_id = B.book_id
     AND A.id <> B.id
     AND A.name < B.name
ORDER BY
  name1,
  name2 ASC;

Subkueri yang sama menggunakan alias A dan B dua kali, menggabungkan reviewers ratings jadual dan mendapatkan semula data untuk setiap pasangan penilaian buku pengulas. p>

Pertanyaan luar utama kemudian memilih pasangan nama pengulas yang berbeza daripada hasil subkueri. Kami menggunakan JOIN antara subkueri A dan B di bawah 3 syarat:

  • A.book_id = B.book_id Jadi pasangan pengulas ini menilai buku yang sama.

  • A.id B.id Digunakan untuk menapis pasangan pengulas dengan ID yang sama untuk mengelakkan pemadanan diri.

  • A.name Pastikan pasangan dipesan konsisten dengan output di bawah, sekali gus menghapuskan pendua. Dengan cara ini, untuk pasangan tertentu, hanya satu kombinasi nama yang dipertimbangkan, seperti "Elizabeth Black-Jack Green", tetapi bukan "Jack Green-Elizabeth Black".

Ini adalah output yang anda akan dapat daripada pertanyaan yang distruktur semula:

+-----------------+-----------------+
|      name1      |      name2      |
+-----------------+-----------------+
| Alice Lewis     | Chris Thomas    |
| Alice Lewis     | Elizabeth Black |
| Alice Lewis     | Jack Green      |
| Alice Lewis     | Joe Martinez    |
| Alice Lewis     | John Smith      |
| Alice Lewis     | Mike White      |
| Chris Thomas    | Elizabeth Black |
| Chris Thomas    | Jack Green      |
| Chris Thomas    | Joe Martinez    |
| Chris Thomas    | John Smith      |
| Chris Thomas    | Mike Anderson   |
| Elizabeth Black | Jack Green      |
| Elizabeth Black | Joe Martinez    |
| Elizabeth Black | John Smith      |
| Elizabeth Black | Mike Anderson   |
| Elizabeth Black | Mike White      |
| Jack Green      | Joe Martinez    |
| Jack Green      | John Smith      |
| Jack Green      | Mike Anderson   |
| Jack Green      | Mike White      |
| Joe Martinez    | John Smith      |
| Joe Martinez    | Mike White      |
| John Smith      | Mike Anderson   |
+-----------------+-----------------+
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan