XPath auf XML in SQLserver

Was ist los mit diesem ??? Meine Aufgabe ist als nächstes: Ich habe eine XML-file und ich muss alle Städte zeigen, ob kein Mick ist. !!! Städte sind nicht einzigartig. So habe ich zum Beispiel Mick-London, Tom-London, Charles-Paris. Die richtige Antwort ist nur Paris.

Abfrage ist für SQL server 2008. Vielen Dank für Hilfe.

Das ist XML:

declare @x xml set @x = '<database> <persons> <person fio="Mick" id="1" /> <work city="London" size="450" /> <state>United Kingdom </state> </persons> <persons> <person fio="Tom" id="8" /> <work city="London" size="500" /> <state>UK</state> </persons> <persons> <person fio="Charles" id="9" /> <work city="Paris" size="450000" /> <state>Frace</state> </persons> <persons> <person fio="Some_name1" id="10" /> <work city="Brussels" size="30000" /> <state>Belgium</state> </persons> <persons> <person fio="Some_name2" id="11" /> <work city="Munich" size="30000" /> <state>Germany</state> </persons> </database>' 

Mein aktuelles Drehbuch ist:

 select @x.query('//work[not(//person[@fio="Mick" and @city = this/../work/@city])]'); 

Sie können diese Abfrage verwenden. Es hat eine innere Abfrage, da die Städte nicht einzigartig sind, also baut es zuerst die Städte für Mick in der inneren Abfrage und bekommt dann alle anderen Städte im Äußeren.

 select y.work.value('(@city)[1]', 'nvarchar(100)') from @x.nodes('//persons/work') y(work) where y.work.value('(@city)[1]', 'nvarchar(100)') not in (select x.work.value('(@city)[1]', 'nvarchar(100)') from @x.nodes('//persons[person[@fio="Mick"]]/work') x(work)) 

Wie gewünscht, wird diese Abfrage nur query :

 select @x.query('//work[not(@city = (//persons[person[@fio="Mick"]]/work/@city))]');