[RUBY] [Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?

Ich möchte SQL mit Unterabfragen streamen (verschachtelt)

Überprüfen Sie anhand des Beispiels, ob doppelte Daten überprüft werden.

Bilden Sie eine Unterabfrage

** Benutzertabelle **

id name address
1 sasaki tokyo
2 itou fukuoka
3 fujita nagasaki
4 sasaki osaka
5 itou nagano

Angenommen, Sie haben eine Tabelle wie die obige. Ich möchte Datensätze mit doppelten Namen abrufen und die Adresse überprüfen.

sql1: Wählen Sie einen mit doppeltem Namen aus


SELECT name FROM users GROUP BY name HAVING  count(name) > 1

Ergebnis

name
itou
sasaki

In diesem Fall kennen wir nicht jede Adresse. Führen Sie SQL basierend auf diesem Ergebnis wie folgt aus.

sql2: Basierend auf doppelten Ergebnissen


SELECT * FROM users WHERE name IN ('itou', 'sasaki') ORDER BY name

Ergebnis

id name address
2 itou fukuoka
5 itou nagano
1 sasaki tokyo
4 sasaki osaka

Wie oben gezeigt, kann auch jede Adresse erhalten werden.

SQL1 und SQL2 werden also zu einer Unterabfrage zusammengefasst.

sql3: Unterabfrage (sql1,sql2)


SELECT * FROM users WHERE name IN (
  SELECT name FROM users GROUP BY name HAVING  count(name) > 1
  ) 
ORDER BY name

Implementiert in Rails

Fazit

Kann geschrieben werden als

Beliebiger Controller


duplicates = User.select(:name).group(:name).having("count(name) > 1")
@users = User.where(name: duplicates)

SQL ausgeführt werden

Von Rails ausgeführtes SQL


 SELECT "users".* FROM "users" WHERE "users"."name" IN (
   SELECT "users"."name" FROM "users" GROUP BY "users"."name" 
   HAVING (count(name) > 1)
 )

Überraschenderweise wird nur ein SQL ausgegeben.

Referenz (ganz einfach zu verstehen!) Unterabfragen mit dem IN-Operator von ActiveRecord (Oakbow) bearbeiten

Recommended Posts

[Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?
Wie schreibe ich Rails
Wie schreibe ich Rails Seed
Wie schreibe ich Rails Routing
So schreiben Sie eine Datumsvergleichssuche in Rails
[Rails] Wie schreibe ich eine Ausnahmebehandlung?
So schreiben Sie eine Migration vom Rails-Datums- / Uhrzeittyp zum Datumstyp
[Basic] So schreiben Sie ein Dockerfile Selbstlernend ②
So fügen Sie ein Video in Rails ein
[Einführung in Java] So schreiben Sie ein Java-Programm
So beheben Sie Fehler, die während der Installation von Rails 5.1.3 auftreten
[Rails] So erstellen Sie eine Teilvorlage
[SpringBoot] So schreiben Sie einen Controller-Test
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So deinstallieren Sie Rails
Wie schreibe ich Docker-Compose
Wie schreibe ich Mockito
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
So schreiben Sie eine Migrationsdatei
Schreiben Sie beim Definieren einer Klasse sowohl formatTo als auch toString (Verwendung von Formattable).
So implementieren Sie eine nette Funktion in Ajax mit Rails
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
So schreiben Sie einen Komponententest für Spring Boot 2
So löschen Sie ein mit Rails erstelltes new_record-Objekt
java: Wie schreibe ich eine generische Typliste? [Hinweis]
So generieren Sie manuell ein JWT mit Knock in Rails
[So fügen Sie ein Video mit Rails in haml ein]
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Wie schreibe ich einen Core Mod in Minecraft Forge 1.15.2
[Schienen] Wie poste ich Bilder?
Wie man guten Code schreibt
[Rails] Verwendung von Enum
[Rails] Verwendung von Enum
Wie schreibe ich einen Java-Kommentar
Wie hinterlasse ich einen Kommentar?
Wie man Schienenrouten liest
[Refactoring] So schreiben Sie Routing
Verwendung von Rails Join
Wie schreibe ich Junit 5 organisiert
So beenden Sie den Rails-Server
[Rails] Verwendung der Validierung
So schreiben Sie ein benutzerorientiertes Programm (1)