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
DDDOriginal
2024-12-28 02:08:09892Durchsuche

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')

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') 

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'

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

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 

Ü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!

Stellungnahme:
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