Heim > Artikel > Backend-Entwicklung > Es gibt ein Problem mit den Abfrageergebnissen, wenn MySQL mehrere Tabellen verknüpft
Aufgrund der Anforderungen der Produkte des Unternehmens müssen wir nun eine Funktion implementieren, in der die grundlegenden Informationen der Benutzer gespeichert werden, und in Tabelle B werden einige Verhaltensweisen der Benutzer in Tabelle A gespeichert. Tabelle C und Tabelle B haben die gleichen Eigenschaften . Bei der Abfrage können wir nach den Zählergebnissen in Tabelle B oder Tabelle C sortieren, also haben wir über Join nachgedacht, aber es gab ein Problem.
Veröffentlichen Sie zunächst die Datenstrukturen der drei Tabellen
<code> CREATE TABLE `A` ( `id` int(11) NOT NULL auto_increment, `username` varchar(255) default NULL, PRIMARY KEY (`id`), ) ENGINE=MyISAM AUTO_INCREMENT=1;</code>
<code> CREATE TABLE `B` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) default NULL, `dosomething` varchar(255) default NULL, PRIMARY KEY (`id`), KEY `userid` USING BTREE (`userid`) ) ENGINE=MyISAM AUTO_INCREMENT=1;</code>
<code> CREATE TABLE `C` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) default NULL, `dosomething` varchar(255) default NULL, PRIMARY KEY (`id`), KEY `userid` USING BTREE (`userid`) ) ENGINE=MyISAM AUTO_INCREMENT=1;</code>
Ich habe es selbst ausprobiert und festgestellt, dass die Abfrageergebnisse unterschiedlich waren
<code>SELECT u.id, COUNT(s.id) AS sapply, COUNT(uu.id) AS ftotal FROM A AS u RIGHT JOIN B AS s ON u.id = s.userid RIGHT JOIN C AS uu ON u.id = `uu`.`userid` GROUP BY `u`.`id` ORDER BY `ftotal` DESC LIMIT 10</code>
Es liegt offensichtlich ein Problem mit den Daten vor, bitte sehen Sie sich die Ergebnisse separat an
<code>SELECT u.id, COUNT(s.id) AS sapply FROM A AS u RIGHT JOIN B AS s ON u.id = s.userid GROUP BY `u`.`id` ORDER BY `sapply` DESC LIMIT 10</code>
<code>SELECT u.id, COUNT(uu.id) AS ftotal FROM A AS u RIGHT JOIN C AS uu ON u.id = uu.userid GROUP BY `u`.`id` ORDER BY `ftotal ` DESC LIMIT 10</code>
Bitte helfen Sie mir, was ist das Problem? Die erste SQL-Anweisung enthält keinen Fehler, aber das Ergebnis ist falsch.