Frage

Nehmen wir zum Beispiel, habe ich die folgenden beiden Tabellen:

TableA { _id }
TableB { _id, TableA_id, OptionString }

Jede Zeile in TableA hat eine oder mehr Zeilen in TableB es Referenzierung (den TableA_id Fremdschlüssel verwendet wird).

Meine Abfrage Listen Zeilen in TableA zu Anzeige für den Benutzer.

OptionString kann einen von zwei Werten sein -. Sagen wir mal "Option1" und "Option2"

Jetzt mag ich die Abfrage noch Listenzeilen in TableA, aber ich mag den Benutzer mit einem Filter zu schaffen, zu sagen, „nur die Zeilen in TableA anzuzeigen, in dem der OptionString entweder hat‚Option1‘OR‚Option2‘(dh. Exklusive oder ).

Ich habe mit COUNT versucht, aber das Problem ist, dass eine Null-Zählung zeigt keine Ergebnisse (nicht ‚0‘, wie ich mag).

Ich bin sicher, muss ich damit etwas einfach fehlen.

Jede Hilfe würde sehr geschätzt werden.

Cheers, Dan.

War es hilfreich?

Lösung

Versuchen Sie dies, wenn ich verstehe Ihre Frage richtig

select a._id
from tableA a
join tableB b on a._id=b.tableA_id
where b.optionString in ('Option1','Option2')
group by a._id
having count(*)=1

Überarbeitete Abfrage auf der Basis neuer Informationen

select a._id
from tableA a
join (select distinct _id,tablea_id,optionString from TableB) b 
        on a._id=b.tableA_id
where b.optionString in ('Option1','Option2')
group by a._id
having count(*)=1

Was ich tue hier zwingt unterschiedliche Werte von tableB

Andere Tipps

Ein naiver Ansatz (vielleicht in der Lage sein, auf diese zu verbessern ...)

SELECT * 
FROM TableA
WHERE _id IN 
  (SELECT TableA_id
   FROM TableB
   WHERE OptionString IN ('Option1', 'Option2')
  )
AND _id NOT IN
  (SELECT T1.TableA_id
   FROM TableB T1
   JOIN TableB T2 ON T1.TableA_id = T2.TableA_id
   WHERE T1.optionString = 'Option1'
     AND T2.optionString = 'Option2'
  )

Die Idee ist einfach qualifizieren Datensätze auszuwählen, in dem der Option1 oder der Option2 gefunden werden, und die Datensätze auszuschließen, in denen beide Option1 und Option2 gefunden werden.

Wenn wir, dass ein gegebenes Optionx Wert wissen kann nur einmal für einen bestimmten Artikel von TableA gefunden werden, eine Gruppe von Abfrage kann anwendbar sein (Sparky Antwort sehen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top