recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Comment écrire le SQL pour cette requête conjointe multi-tables?

Mon problème est tel qu'indiqué dans l'image ci-dessous. La structure et les données de la base de données se trouvent dans le bloc de code ci-dessous.

< /p>

Le résultat que j'espère obtenir est :

La structure et les données du tableau sont les suivantes

CRÉER LA TABLE A(
identifiant INT PAS NULL,
num INT NON NULL
)CHARSET=utf8;

INSÉRER DANS A(id,num) VALUES(1,5),(2,7),(3,6);

CRÉER LA TABLE B(
aide INT NON NULL,
sid INT PAS NULL,
contenu VARCHAR(20) NON NULL
)CHARSET=utf8;

INSÉRER DANS B(aid,sid,content) VALUES(3,1,'A'),(3,2,'B'),(3,3,'C');

CRÉER UNE TABLE C(
identifiant INT PAS NULL,
temps INT NON NULL,
libs VARCHAR(20) NON NULL
)CHARSET=utf8;

INSÉRER DANS LES VALEURS C(id,time,libs)(2,18,'wagaga'),(3,16,'aaaa'),(1,15,'cc'),(3,17,'dddd') ,(4,14,'eeee'),(3,10,'ffff'),(3,11,'bbbb');

Cela peut répondre à mes besoins, mais l'efficacité d'exécution est trop faible...

sélectionner * à partir de
(
SELECT distinct
    a.id,a.num,b.aid,b.sid,b.content,c.id comme cid,c.time,c.libs
DEPUIS
    un un
REJOINDRE GAUCHE b b ON b.aid = a.id
REJOINDRE À GAUCHE c ON c.id = b.sid
OÙ a.id = 3
COMMANDER PAR heure DESC
) comme TMP
GROUP BY cid ;

Y a-t-il un expert qui peut proposer une méthode d'écriture plus efficace ?

阿神阿神2759 Il y a quelques jours836

répondre à tous(5)je répondrai

  • 習慣沉默

    習慣沉默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 ;

    répondre
    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

    S'il s'agit des données ci-dessus, ce SQL devrait être satisfait. . . Si vous n’êtes pas satisfait, ne vous en souciez pas...


    Voici le résultat de ma requête

    répondre
    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

    répondre
    0
  • 曾经蜡笔没有小新

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

    Ce que vous voulez n'est pas clairement décrit dans la question. . .

    répondre
    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 ;
    

    Il y a un problème d'efficacité..

    répondre
    0
  • Annulerrépondre