cari

Rumah  >  Soal Jawab  >  teks badan

php - Bagaimana untuk menulis SQL untuk pertanyaan bersama berbilang jadual ini?

Masalah saya adalah seperti yang ditunjukkan dalam gambar di bawah Struktur pangkalan data dan data berada dalam blok kod di bawah.

< /p>

Hasil yang saya harap dapat ialah:

Struktur jadual dan data adalah seperti berikut

BUAT JADUAL A(
id INT BUKAN NULL,
num INT BUKAN NULL
)CHARSET=utf8;

MASUKKAN KE DALAM A(id,num) NILAI(1,5),(2,7),(3,6);

BUAT JADUAL B(
bantuan INT BUKAN NULL,
sid INT BUKAN NULL,
kandungan VARCHAR(20) BUKAN NULL
)CHARSET=utf8;

MASUKKAN KE DALAM B(bantuan,sid,kandungan) NILAI(3,1,'A'),(3,2,'B'),(3,3,'C');

BUAT JADUAL C(
id INT BUKAN NULL,
masa INT BUKAN NULL,
libs VARCHAR(20) BUKAN NULL
)CHARSET=utf8;

MASUKKAN KE DALAM C(id,masa,libs) NILAI(2,18,'wagaga'),(3,16,'aaaa'),(1,15,'cc'),(3,17,'dddd') ,(4,14,'eeee'),(3,10,'ffff'),(3,11,'bbbb');

Ini boleh memenuhi keperluan saya, tetapi kecekapan pelaksanaan terlalu rendah...

pilih * daripada
(
PILIH berbeza
    a.id,a.num,b.aid,b.sid,b.content,c.id sebagai cid,c.time,c.libs
DARI
    a
KIRI SERTAI b b ON b.aid = a.id
KIRI SERTAI c PADA c.id = b.sid
DI MANA a.id = 3
PESANAN MENGIKUT masa DESC
) sebagai TMP
KUMPULAN MENGIKUT cid ;

Adakah pakar yang boleh menyediakan cara penulisan yang lebih cekap?

阿神阿神2837 hari yang lalu877

membalas semua(5)saya akan balas

  • 習慣沉默

    習慣沉默2017-05-16 13:09:35

    SELECT
        a.id,a.num,b.aid,b.sid,b.content,c.id,substring_index(group_concat(c.time order by c.time desc),',',1) ctime,substring_index(group_concat(c.libs order by c.time desc),',',1) clibs
    FROM a
    JOIN b ON b.aid = a.id
    JOIN c ON c.id = b.sid
    WHERE a.id = 3
    GROUP BY c.id ;

    balas
    0
  • 天蓬老师

    天蓬老师2017-05-16 13:09:35

    SELECT
        *
    FROM
        a a
    LEFT JOIN b b ON b.aid = a.id
    LEFT JOIN c ON c.id = b.sid
    WHERE a.id = 3
    GROUP BY c.id

    Jika ia adalah data di atas, sql ini harus berpuas hati. . . Kalau tak puas hati, just don’t care...


    Ini hasil pertanyaan saya

    balas
    0
  • 高洛峰

    高洛峰2017-05-16 13:09:35

    select A.num,b.content,c.time,c.libs from A left join B on A.id=B.id left join C on C.id = A.id order by C.time desc limit 0,1

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:09:35

    Apa yang anda mahukan tidak diterangkan dengan jelas dalam soalan. . .

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 13:09:35

    select * from
    (
    SELECT distinct
        a.id,a.num,b.aid,b.sid,b.content,c.id as cid,c.time,c.libs
    FROM
        a
    LEFT JOIN b  ON b.aid = a.id
    LEFT JOIN c ON c.id = b.sid
    WHERE a.id = 3
    ORDER BY time DESC
    ) as TMP
    GROUP BY cid ;
    

    Ada masalah kecekapan..

    balas
    0
  • Batalbalas