2016-10-24 3 views
0

Ist es möglich, die Unterabfrage aus diesem SQL zu entfernen?SQL-Unterabfrage an Joins -

Tabelle hat 2 Attribute "ID" und "Feld" Viele Feld könnte die gleiche ID haben.

hat diese Tabelle viele Register mit der gleichen ID und anderen Wert

Bedürftig bekommen alle gleichen Id-Werte für einen von ihnen wie Filter.

select * 
from Table 
where id = (select id from Table where value = 'someValue') 

Ich denke, es könnte wirklich einfach sein, aber ich weiß nicht, wie es geht.

+0

ersetzen, dass '=' mit einem 'IN' – Lamak

+1

Warum nicht direkt verwenden' wobei Wert = ‚someValue'' statt subquery –

+0

Ich kann die Unterabfrage mit dieser Ursache ersetzen i viele Register mit dem haben könnte gleiche ID – Tincho

Antwort

1

Selbst werden kann Join

select T.Id,T.Field 
from Table T 
INNER JOIN Table TT 
ON T.ID = TT.ID 
AND TT.Value = 'someValue' 
+0

Danke! es löst mein Problem – Tincho

0

Edited (richtige Antwort):

Was ich nehme an, Ihr Problem ist:
Sie einen Wert haben. Stellen wir uns vor, es wäre "testValue". Jetzt möchten Sie die ID dieses Wertes erhalten und alle anderen Datensätze mit derselben ID finden. Was gelöscht werden muss, ist, dass "ID" nicht der Primärschlüssel ist und nicht eindeutig ist.

Sie sollten diese in der Lage sein, zu lösen, indem eine einfache Selbst verbinden:

select t.* from Table t right join Table tt on tt.id = t.id where tt.value = 'someValue'; 

Also wegen der Verbindung werden Sie ein Ergebnis bekommen, die einfach auf den Tisch zurück. Mit der where-Klausel verkleinern Sie das Ergebnis auf Ihren Wert. Sie sollten den Satz von IDs erhalten.



Alte Antwort:

Diese den Trick tun sollten:

select * from Table a inner join Table2 b on a.id = b.id where b.value = 'someValue'; 

Sie erwähnt nur eine Tabelle in Ihrer Frage. Ich denke, das muss ein Fehler sein. Wenn nicht, müssen Sie nur die Table2 in meiner Abfrage ändern. Aber das würde keinen Sinn hat, wie Sie eine einfache Abfrage tun könnten, auch:

select * from Table where value = 'someValue'; 

dies das Ergebnis der ersten Abfrage mit einem selbst würde kommen.

+0

In diesem Codebeispiel verwendet er eine Tabelle. – Namrehs

+0

@Namrehs Ok, ich habe es bearbeitet, um einen Self-Join durchzuführen. Aber wo ist die Verwendung dieser Abfrage und warum nicht 'select * from Table wo Wert = 'someValue'? –

+0

@NAMRehs - Ich habe das bemerkt, aber in diesem Fall brauchst du den Tisch überhaupt nicht zu wiederholen - es schien mir wahrscheinlich, dass es tatsächlich zwei Tische gibt - es ist eine der wenigen Verwirrungen hier um ehrlich zu sein – Cato

0

getan Diese

select T1.* from Table T1 JOIN Table T2 ON T1.id = T2.id AND T2.value = 'someValue' 
1

Nicht sicher arbeiten sollten, wenn Sie Ihr Beispiel zu viel über vereinfachte, aber man könnte diese ein wenig einfacher machen.

select * 
from Table 
where value = 'someValue' 
+0

Nicht unbedingt korrekt (wenn es doppelte IDs mit unterschiedlichen Wertwerten gibt.) – jarlh

+0

Einverstanden. Aber es ist unmöglich zu sagen, was sie wollen angesichts der vagen Erklärung. –