none
Abfrage SQL RRS feed

  • Frage

  • Hallo zusammen,
    irgendwie stehe ich gerade auf dem Schlauch und deshalb frage ich einmal hier nach.

    Ich habe folgende Tabelle (stark vereinfacht):

    ObjectId	Key     	UserString
    1       	Wert1	
    1       	Wert2	
    1       	Wert3	
    2              	Wert1	
    2       	Wert2   	12345
    2       	Wert3	
    3       	Wert1	
    3       	Wert2   	89531
    3       	Wert3   	BlaBlubb
    .
    .
    .
    .
    

    Nun möchte ich ein Skript schreiben welches folgendes macht:

        • Suche mir alle Zeilen wo der [Key] = 'Wert2' und UserString in dieser Zeile <> '' ist.
        • Zeige nun alle Zeilen mit der entsprechenden ObjectId´s aus 1 an.

    Gefunden werden soll dann:

    ObjectId	Key     	UserString
    2              	Wert1	
    2       	Wert2   	12345
    2       	Wert3	
    3       	Wert1	
    3       	Wert2   	89531
    3       	Wert3   	BlaBlubb
    .
    .
    .
    .

    Ich habe schon mit dem Join Befehl rumgespielt bekomme aber irgendwie nicht das Ergebnis was ich haben möchte.
    Entweder ich bekomme entweder alle 5,3M Zeilen der Tabelle, 0 Zeilen oder nur die Zeilen in denen der Wert2 <> '' ist.

    select distinct t.ObjectId, t.[Key], t.UserString
    from Datenbank.dbo.UserString t
    left outer join Datenbank.dbo.UserString t1 on t1.[Key] = 'Wert2' and t1.UserString <> ''

    Hat jemand eine Idee ???
    Wie gesagt irgendwie stehe ich gerade auf dem Schlauch =(.
    Vielleicht ist das ja mit dem Join auch der falsche Ansatz.

    Danke und  Gruß
       Stephan

  • Suche deWert2 <> ''
  • Dann zeige mir alle zugehörigen Zeilen mit der gleichen ObjectId an
  • Suche den Wert2 <> ''
  • Dann zeige mir alle zugehörigen Zeilen mit der gleichen ObjectId an
  • Freitag, 9. Oktober 2015 11:24

    Antworten

    • Hallo Stephan, ich würde das mit EXISTS lösen.

      Declare @test as Table(ObjectId int, [Key] varchar(20),     UserString
      varchar(20));
      
      Insert into @test(ObjectId, [Key], UserString) values (1, 'Wert1', '');
      Insert into @test(ObjectId, [Key], UserString) values (1, 'Wert2', '');
      Insert into @test(ObjectId, [Key], UserString) values (1, 'Wert3', '');
      Insert into @test(ObjectId, [Key], UserString) values (2, 'Wert1', '');
      Insert into @test(ObjectId, [Key], UserString) values (2, 'Wert2', '12345');
      Insert into @test(ObjectId, [Key], UserString) values (2, 'Wert3', '');
      Insert into @test(ObjectId, [Key], UserString) values (3, 'Wert1', '');
      Insert into @test(ObjectId, [Key], UserString) values (3, 'Wert2', '89531');
      Insert into @test(ObjectId, [Key], UserString) values (3, 'Wert3',
      'BlaBlubb');
      
      Select *
      from @test t
      where exists
      (
      Select *
      from @test t1
      where t1.[Key] = 'Wert2'
      and t1.UserString <> ''
      and t.ObjectId = t1.ObjectId)
      ;

      Einen schönen Tag noch,
      Christoph
      --
      Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

      Freitag, 9. Oktober 2015 11:36
      Beantworter

    Alle Antworten

    • Hallo Stephan, ich würde das mit EXISTS lösen.

      Declare @test as Table(ObjectId int, [Key] varchar(20),     UserString
      varchar(20));
      
      Insert into @test(ObjectId, [Key], UserString) values (1, 'Wert1', '');
      Insert into @test(ObjectId, [Key], UserString) values (1, 'Wert2', '');
      Insert into @test(ObjectId, [Key], UserString) values (1, 'Wert3', '');
      Insert into @test(ObjectId, [Key], UserString) values (2, 'Wert1', '');
      Insert into @test(ObjectId, [Key], UserString) values (2, 'Wert2', '12345');
      Insert into @test(ObjectId, [Key], UserString) values (2, 'Wert3', '');
      Insert into @test(ObjectId, [Key], UserString) values (3, 'Wert1', '');
      Insert into @test(ObjectId, [Key], UserString) values (3, 'Wert2', '89531');
      Insert into @test(ObjectId, [Key], UserString) values (3, 'Wert3',
      'BlaBlubb');
      
      Select *
      from @test t
      where exists
      (
      Select *
      from @test t1
      where t1.[Key] = 'Wert2'
      and t1.UserString <> ''
      and t.ObjectId = t1.ObjectId)
      ;

      Einen schönen Tag noch,
      Christoph
      --
      Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

      Freitag, 9. Oktober 2015 11:36
      Beantworter
    • Hallo Christoph,

      danke sehr. Das war jetzt genau die Lösung die ich gebraucht habe.
      Und wenn ich ehrlich bin EXISTS wäre das letzte gewesen an das ich gedacht hätte.

      Danke und Gruß
         Stephan

      Freitag, 9. Oktober 2015 12:09