Heim >Datenbank >MySQL-Tutorial >Wie wähle ich Benutzer mit mehreren Tags mithilfe von SQL-Joins aus?

Wie wähle ich Benutzer mit mehreren Tags mithilfe von SQL-Joins aus?

DDD
DDDOriginal
2024-12-20 05:41:14219Durchsuche

How to Select Users with Multiple Tags Using SQL Joins?

So implementieren Sie SQL-Bedingungen für mehrere Zeilen in einem Join

Das vorgestellte Problem dreht sich um die Auswahl von Benutzern, die zwei bestimmte Tags aus einem Join besitzen Betrieb. Während das bereitgestellte Beispiel mit IN Benutzer mit beiden Tags zurückgibt, besteht das gewünschte Ergebnis darin, Benutzer abzurufen, die beide Tags besitzen. Um dies zu erreichen, ist die Nutzung des Schlüsselworts ALL ungeeignet.

Lösungen

1. Testen verschiedener Zeilen

  • EXISTS-Unterabfragen:Überprüfen Sie, ob Zeilen vorhanden sind, die den Bedingungen in mehreren Zeilen entsprechen.
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')
  • Unterabfragen: Wählen Sie Benutzer aus, die mehreren Bedingungen entsprechen Zeilen.
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') 
  • JOINs:Erstellen Sie mehrere Joins für jede Tag-Bedingung.
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. Aggregierte Zeilen

  • COUNTs (erfordert Datenschutz):Zählt aggregierte Zeilen, um das Vorhandensein beider Tags sicherzustellen.
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
  • String-Verarbeitung (datenbankspezifisch): Tag-Namen verketten und auf Vorhandensein prüfen spezifischer Tags mithilfe datenbankspezifischer Funktionen.
(MySQL Specific)
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 

Das obige ist der detaillierte Inhalt vonWie wähle ich Benutzer mit mehreren Tags mithilfe von SQL-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