Heim > Datenbank > MySQL-Tutorial > Wie wähle ich Benutzer mit „tag1' und „tag2' in SQL mithilfe von JOINs aus?

Wie wähle ich Benutzer mit „tag1' und „tag2' in SQL mithilfe von JOINs aus?

DDD
Freigeben: 2024-12-28 02:08:09
Original
792 Leute haben es durchsucht

How to Select Users with Both 'tag1' and 'tag2' in SQL Using JOINs?

Bedingungen über mehrere Zeilen in SQL JOINs

Problem: Anwenden von Bedingungen über mehrere Zeilen in einem JOIN, um übereinstimmende Datensätze abzurufen.

Ziel: Wählen Sie Benutzer aus, die sowohl „Tag1“ als auch „Tag2“ haben. Tags.

Anwendung

Es gibt zwei Hauptansätze, um dieses Problem zu lösen:

1. Einzelne Zeilen testen

A. EXISTIERT:

SELECT * 
FROM users 
WHERE EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag1') 
  AND EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag2')
Nach dem Login kopieren

B. Unterabfragen:

SELECT * 
FROM users 
WHERE id IN (SELECT user_id FROM tags WHERE name ='tag1') 
  AND id IN (SELECT user_id FROM tags WHERE name ='tag2') 
Nach dem Login kopieren

C. JOINs:

SELECT u.* 
FROM users u 
INNER JOIN tags t1 ON u.id = t1.user_id
INNER JOIN tags t2 ON u.id = t2.user_id
WHERE t1.name = 'tag1' 
  AND t2.name = 'tag2'
Nach dem Login kopieren

2. Zeilen aggregieren

A. ZÄHLUNGEN:

SELECT users.id, users.user_name
FROM users 
INNER JOIN tags ON users.id = tags.user_id
WHERE tags.name IN ('tag1', 'tag2')
GROUP BY users.id, users.user_name
HAVING COUNT(*) = 2
Nach dem Login kopieren

B. String-Verarbeitung:

SELECT user.id, users.user_name, GROUP_CONCAT(tags.name) as all_tags
FROM users INNER JOIN tags ON users.id = tags.user_id
GROUP BY users.id, users.user_name
HAVING FIND_IN_SET('tag1', all_tags) > 0 AND FIND_IN_SET('tag2', all_tags) > 0 
Nach dem Login kopieren

Überlegungen

  • Testen einzelner Zeilen: Geeignet für kleine Datensätze, aber bei großen Datenmengen kann die Leistung leiden.
  • Zeilen aggregieren: In Bezug auf die Leistung besser skalierbar, weist jedoch Einschränkungen auf wenn innerhalb des Aggregats Duplikate vorhanden sein können.
  • Datenbankkompatibilität:String-Verarbeitungstechniken erfordern möglicherweise datenbankspezifische Erweiterungen.

Das obige ist der detaillierte Inhalt vonWie wähle ich Benutzer mit „tag1' und „tag2' in SQL mithilfe von JOINs aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage