none
Where- Klausel mit Select RRS feed

  • Frage

  • Hallo zusammen,
    folgendes Problem. Hier eine WHERE-Klausel:

    and
    (ltrim(rtrim(nf3.Such))) COLLATE database_default
    in

    (SELECT (ia.Such) as  Vergleich FROM [BI02].[dbo].[Industrielle_Automation_01]ia

    Die Spalte nf3.Such enthält Zeichenfolgen aus 2, 3 oder mehr Zeichen.
    Die Spalte ia.Such enthält Zeichenfolgen aus 2 oder 3 Zeichen.
    Jetzt möchte ich so etwas erreichen wie nf3.Such like ia.Such + '%'. Wie kann man so etwas in diesem Select einbauen?

    Danke für die Hilfe!
    Viele Grüße
    Olaf 



    • Bearbeitet Olaf113 Montag, 21. September 2020 08:57
    Montag, 21. September 2020 08:56

Antworten

  • Hallo Olaf,

    poste doch bitte die Tabellenstrukturen als CREATE TABLE Statements, Beispieldaten als INSERT INTO Statements und das gewünschte Ergebnis, basierend auf den geposteten Beispieldaten.

    Grundsätzlich geht es bspw. so:

    SELECT ...
    FROM   ... ia
           INNER JOIN ... ia01 ON ia.such LIKE ia01.such + '%'

    Ich würde allerdings eher einen Ansatz in dieser Form wählen, wenn möglich:

    SELECT ...
    FROM   ... ia
    WHERE  <IdSpalte> IN ( SELECT <ForeignKeySpalte> FROM <AndereTabelle> at WHERE at.such LIKE ia.such + '%' )

    Ob das nun besser und performanter ist, hängt aber von vielen Faktoren ab. Da wir die aber leider nicht kennen, ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport



    Montag, 21. September 2020 09:10
    Moderator
  • Hallo Olaf,

    kannst Du kein Kreuzprodukt machen?

    CREATE TABLE #a(Such varchar(10));
    CREATE TABLE #b(Such varchar(3));
    
    INSERT INTO #a(Such) VALUES('a'),('ab'),('abc'),('abcd'); 
    INSERT INTO #b(Such) VALUES('ab'),('abc'); 
    
    SELECT #a.Such AS A_Such, #b.Such AS B_Such
    FROM #a,
    #b
    WHERE #a.Such COLLATE database_default LIKE #b.Such + '%'
    ORDER BY A_Such, B_Such;
    
    GO
    DROP TABLE #a;
    drop table #b;
    
    


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

    • Als Antwort markiert Olaf113 Montag, 21. September 2020 09:58
    Montag, 21. September 2020 09:22

Alle Antworten

  • Hallo Olaf,

    poste doch bitte die Tabellenstrukturen als CREATE TABLE Statements, Beispieldaten als INSERT INTO Statements und das gewünschte Ergebnis, basierend auf den geposteten Beispieldaten.

    Grundsätzlich geht es bspw. so:

    SELECT ...
    FROM   ... ia
           INNER JOIN ... ia01 ON ia.such LIKE ia01.such + '%'

    Ich würde allerdings eher einen Ansatz in dieser Form wählen, wenn möglich:

    SELECT ...
    FROM   ... ia
    WHERE  <IdSpalte> IN ( SELECT <ForeignKeySpalte> FROM <AndereTabelle> at WHERE at.such LIKE ia.such + '%' )

    Ob das nun besser und performanter ist, hängt aber von vielen Faktoren ab. Da wir die aber leider nicht kennen, ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport



    Montag, 21. September 2020 09:10
    Moderator
  • Hallo Olaf,

    kannst Du kein Kreuzprodukt machen?

    CREATE TABLE #a(Such varchar(10));
    CREATE TABLE #b(Such varchar(3));
    
    INSERT INTO #a(Such) VALUES('a'),('ab'),('abc'),('abcd'); 
    INSERT INTO #b(Such) VALUES('ab'),('abc'); 
    
    SELECT #a.Such AS A_Such, #b.Such AS B_Such
    FROM #a,
    #b
    WHERE #a.Such COLLATE database_default LIKE #b.Such + '%'
    ORDER BY A_Such, B_Such;
    
    GO
    DROP TABLE #a;
    drop table #b;
    
    


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

    • Als Antwort markiert Olaf113 Montag, 21. September 2020 09:58
    Montag, 21. September 2020 09:22
  • Vielen Dank für die schnellen Antworten!
    Für mich ist die perfekte Lösung das Kreuzprodukt.
    Euch auch noch einen schönen Tag!
    Viele Grüße
    Olaf
    Montag, 21. September 2020 09:58