SQL-Anweisung unter Verwendung der Where-Klausel mit mehreren Werten

Ich habe eine Tabelle mit mehreren Zeilen mit den folgenden Feldern:

<code>PersonName SongName Status
</code>

Ich möchte Namen verwenden, die aus einem Listenfeld mit Mehrfachauswahl ausgewählt wurden, von dem ich die Werte abrufen kann, und dann eine where-Klausel ausführen, damit die Songtitel angezeigt werden, die alle ausgewählten Personen wiedergeben können. Daher ist der Status abgeschlossen.

Zum Beispiel:

<code> PersonName      SongName    Status 
 Holly           Highland    Complete
 Holly           Mech        Complete 
 Ryan            Highland    Complete
</code>

Wenn ich Holly und Ryan aus dem Listenfeld auswähle und die Schaltfläche drücke, sollte die Abfrage nur Highland anzeigen, da beide das wissen.

 Sophie04. Apr. 2012, 16:21
WÄHLEN SIE [SongName] AUS [Learning] WHERE ([BandieName] WIE '%' + '"& item.Text &" +'% ') UND ([BandieName] WIE'% '+' "& item.Text &" '+'% ') AND ([Status] LIKE' Complete ')
 Mosty Mostacho04. Apr. 2012, 16:07
ObRyan hat nichtComplete als status sollte das ergebnis stehenHighland?

Antworten auf die Frage(3)

Lösung für das Problem

Versuche dies:

<code>select songName from t
where personName in ('Ryan', 'Holly')
group by songName
having count(distinct personName) = 2
</code>

Die Anzahl der Personen sollte mit der Anzahl der Personen übereinstimmen. Wenn du auch den Status haben willstComplete benutze daswhere Klausel anstelle der vorherigen:

<code>where personName in ('Ryan', 'Holly') and status = 'Complete'
</code>
 Sophie04. Apr. 2012, 16:49
Also lief diese Abfrage und lieferte Ihnen das erwartete Ergebnis, also lief sie korrekt?
 Sophie04. Apr. 2012, 16:54
Sorry, ich habe deine Antwort nicht verstanden. Das funktioniert aber sehr gut. Vielen Dank!
 Sophie04. Apr. 2012, 16:28
Dies bringt keine Ergebnisse hervor, dies ist ähnlich zu dem, mit dem ich vorher gearbeitet habe, wenn Sie in 'holly' UND 'RYAN' verwendet haben oder es mögen, dann bringt es keine Ergebnisse hervor, wenn Sie OR anstelle von AND verwenden Alle diese Songs, die sowohl für Holly als auch für Ryan den Status "vollständig" haben, nicht nur die, für die sowohl Holly als auch Ryan den Status "vollständig" haben. Vielen Dank
 Mosty Mostacho04. Apr. 2012, 16:55
Nein, die Logik ist korrekt und daher ist das Ergebnis korrekt: Die Logik ist klar. Entfernen Sie zuerst alle Werte, die sich von 'Ryan' und 'Holly' unterscheiden, und gruppieren Sie sie dann nach Songnamen. Wenn die Anzahl der unterschiedlich gezählten personNames zwei ist (weil Ryan und Holly 2 sind), bedeutet dies, dass Ryan und Holly beide dieses Lied haben. Führen Sie alle erforderlichen Tests durch und lassen Sie mich wissen, wenn Sie Fehler in den Ergebnissen feststellen.
 Mosty Mostacho04. Apr. 2012, 16:57
Toll, willkommen :)
 Mosty Mostacho04. Apr. 2012, 16:31
Das ist nicht möglich, wie Sie sehen, liefert es das erwartete ErgebnisHier mit den gleichen Daten, die Sie angegeben haben.
<code>Select t1.SongName
From tablename t1
left join tablename t2
 on t1.SongName = t2.SongName
    and t1.PersonName <> t2.PersonName
    and t1.Status = 'Complete' -- my assumption that this is necessary
    and t2.Status = 'Complete' -- my assumption that this is necessary
    and t1.PersonName IN ('Holly', 'Ryan')
    and t2.PersonName IN ('Holly', 'Ryan')
</code>
 Sophie04. Apr. 2012, 16:45
Meine Tabelle heißt Lernen, was wäre das Äquivalent für t1 und t2?
 Sophie04. Apr. 2012, 16:23
Sie sind beide in der gleichen Tabelle?
 Sam DeHaan04. Apr. 2012, 16:47
@Sophie sind einfache Aliase, um Instanzen der Tabelle zu trennen. Sie können t1 und t2 sein. Sie können Katze und Hund sein, lernen1 und lernen2, l1 und l2 ...
 Sam DeHaan04. Apr. 2012, 16:29
@Sophie Ja, das ist ein Self-Join.
<code>SELECT PersonName, songName, status
FROM table
WHERE name IN ('Holly', 'Ryan')
</code>

Geben Sie eine durch Kommas getrennte Zeichenfolge einVerwenden Sie eine spezielle Funktion, um eine durch Kommas getrennte Zeichenfolge in eine Tabellenwertvariable zu teilenBenutzenINNER JOIN ON t.PersonName = newTable.PersonName Verwenden einer Tabellenvariablen, die übergebene Namen enthält
 aF.04. Apr. 2012, 16:42
@Bridge die Frage wurde oO bearbeitet
 aF.04. Apr. 2012, 16:06
name sollte ein Alias ​​der Spalte PersonName sein.
 Bridge04. Apr. 2012, 17:19
@aF.edited 1 hour ago Bridge Oh wirklich - habe es nicht bemerkt;)
 sll04. Apr. 2012, 16:54
lol jungs ....;)
 Bridge04. Apr. 2012, 16:09
@aF. Sie können sehen, warum Sie verwirrt wären - die Beispieldaten zeigen andere Spaltennamen als die zuvor genannten Definitionen!

Ihre Antwort auf die Frage