Rumah  >  Soal Jawab  >  teks badan

SQL: Cara untuk menanyakan jadual bercantum dengan kunci komposit dengan membandingkan baris dan lajur

Saya mempunyai jadual sambungan Mysql user_connections yang memetakan jadual users dengan lajur berikut: user_from dan user_to >, yang kedua-duanya adalah kunci asing dalam jadual users.

Logik saya ialah jika

id1 menghantar permintaan kepada id2, dalam kes ini ia akan menjadi permintaan yang belum selesai. Permintaan akan dianggap diluluskan hanya jika ia diterima oleh id2 yang akan memberikan corak di atas (id1, id2) dan (id2, id1) dalam jadual (kotak merah).

Jadi soalan saya ialah bagaimana untuk menanyakan jadual

user_connections supaya saya boleh mendapatkan semua permintaan yang belum selesai berdasarkan id1 (kotak biru)

Saya tidak tahu bagaimana untuk melakukan ini. Jadi sebarang bantuan akan dihargai. Terima kasih terlebih dahulu.

P粉358281574P粉358281574402 hari yang lalu483

membalas semua(1)saya akan balas

  • P粉287345251

    P粉2873452512023-09-14 20:36:03

    Jika anda mencari semua permintaan belum selesai yang ditakrifkan oleh jadual user_connections, maka anda perlu melakukan sambung luar kiri antara jadual itu dan jadual itu sendiri, seperti ini:

    Seni bina (MySQL v5.7)

    create table user_connections (
      user_from int,
      user_to int,
      primary key(user_from, user_to)
      );
      
      insert into user_connections(user_from, user_to) values(1, 2);
      insert into user_connections(user_from, user_to) values(2, 1);
      insert into user_connections(user_from, user_to) values(67, 1);
      insert into user_connections(user_from, user_to) values(68, 1);
      insert into user_connections(user_from, user_to) values(69, 1);
      insert into user_connections(user_from, user_to) values(70, 1);

    Pertanyaan #1

    select uc1.user_from, uc1.user_to from
    user_connections uc1 left join
    user_connections uc2 on uc2.user_from = uc1.user_to and uc2.user_to = uc1.user_from
    where uc2.user_from is null;
    pengguna_daripada pengguna_kepada
    67 1
    68 1
    69 1
    70 1

    balas
    0
  • Batalbalas