2016-09-27 4 views
0

Ich habe eine SQL-Ansicht, ähnlich dem unten:SQL-Abfrage Server alle aus View abrufen

map_id | type_id | path 
    1   1   0 
    2   2   0 
    3   3   0 
    4   1   A>B 
    5   1   A>B>C 
    6   2   T>Z 
    7   2   T>Z>X 
    8   3   U 
    9   3   X>Y 
    10   1   D 

Und eine andere Tabelle, tblRoles

role_group_id | type_id | map_id 
1    1   1 
2    1   4 

Ich möchte eine Abfrage erstellen, das wird umfassen alle map_id wo role_group_id die map_id = 1 und für den Rest hat, sollte er nur die entsprechenden map_id

Also, das Abfrageergebnis sho erhalten Wie sieht das aus:

role_group_id | type_id | map_id | path 
1    1   4   A>B 
1    1   5   A>B>C 
1    1   10  D 
1    1   1   0 
2    1   4   A>B 

Könnte mir jemand auf die richtige Weise zeigen? Vielen Dank!

+1

Ich konnte das Muster in Ihrem erwarteten Ergebnis nicht sehen – Sherlock

+0

Grundsätzlich in dem tblRoles wir die Freiheit, das Hinzufügen einer einzige Zeile für type_id weicht für alle Zeilen mit dem gleichen type_id aus Sicht abgefragt werden haben wollen .. Es ist wie alles auswählen, wenn map_id = 1 und wenn map_id ist anders, wählen Sie nur die entsprechende Zeile aus Sicht – rosuandreimihai

+0

, aber die Frage ist, warum '1 1 0' nicht im Ergebnis enthalten? Vielleicht, weil es einen Pfad von "0" hat? Es hat eine Typ-ID von 1 und Karten-ID von 1 – Sherlock

Antwort

1

dies noch nicht getestet Ich hoffe, das sollte funktionieren.

SELECT r.role_group_id 
     ,r.type_id 
     ,sv.map_id 
     ,sv.path 
FROM tblRoles r 
LEFT JOIN sampleView sv ON r.type_id = sv.type_id 
WHERE r.map_id = 1 
UNION 
SELECT r.role_group_id 
     ,r.type_id 
     ,r.map_id 
     ,sv.path 
FROM tblRoles r 
INNER JOIN sampleView sv ON r.map_id = sv.map_id 
WHERE r.map_id <> 1 
+0

Es funktioniert! Danke vielmals! – rosuandreimihai

+0

@rosuandreimihai Ihre Begrüßung :) – Sherlock

0

können Sie verwenden UNION

@rosuandreimihai: Alles auswählen, wenn MAP_ID = 1 und wenn MAP_ID anders ist, wählen Sie nur die entsprechenden Zeile

DECLARE @CurrentMapId INT = 1 

SELECT * FROM FirstTable 
WHERE 
    TYPE_ID IN 
    (
     SELECT r.type_id FROM tblRoles r 
     WHERE   
      map_id = @CurrentMapId 
    ) 
UNION 
SELECT * FROM FirstTable 
WHERE 
    map_id IN 
    (
     SELECT r.map_id FROM tblRoles r 
     WHERE   
      @CurrentMapId = 1 OR 
      map_id = @CurrentMapId 
    ) 
Verwandte Themen