[NEWSboard IBMi Forum]

Thema: SQL if exists

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.929
    Count(*) zählt auch alles ab und bei vielen Sätzen, ohne entsprechenden (Encoded) Vector Index, kann das schon dauern!
    Wenn Du nur wissen willst, ob ein Satz vorhanden ist oder nicht, solltest Du mit FETCH FIRST ROW ONLY oder LIMIT (ist im Übrigen SQL Standard!) oder mit EXISTS (wie Baldur erklärt hat) oder mit Values() arbeiten:

    Code:
    Select 1
       from D_FWABUS
       Where MANDKENN like 'EWI%'
    Fetch First Row Only;
    Und wenn Du unbedingt ein "IF" haben willst, kannst Du die Abfrage auch so machen:
    Code:
    Values(Case When (SELECT 1 FROM D_FWABUS WHERE MANDKENN LIKE 'EW1%' Fetch First Row Only) = 1 
                Then 1 
                else 0 End);
    Es ist allerdings zu beachten, dass SQL Server keine Db2 for i ist und die Datenbanken unterschiedlich optimieren. Der Query Optimizer auf der i kann durch die Kommunikation mit dem Statistics Manager und weil die Statistiken auch immer aktuell sind, auch die Summe relativ fix ermitteln.

    ... und dann solltest Du Tests nicht (mehr) mit STRSQL, sondern mit ACS machen!

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.700
    Wobei es bei ACS keinen Unterschied im SQL zu STRSQL gibt.
    Microsoft SQL-Server war und ist immer schon was besonderes und hat halt viele Non-SQL-Erweiterungen, die mit SQL-Standard nur wenig bis gar nichts zu tun hat.
    Somit lassen sich SQL-Server SQL's häufig gar nicht auf die DB2 for i anwenden.

    SQL-Server:
    select current date;

    DB2:
    values(current date)

    SQL-Server:
    select bla into newtable
    from oldtable where ...

    db2:
    create table newtable as
    (select * from oldtable)
    with data

    usw. usf.
    Und das Allerschlimmste: SQL-Server ist ein schlechterer Optimierer als unsere DB2 und macht grundsätzlich "pessimistische" Locks.
    Letzteres bedeutet:
    Solange eine "Select xxx" nicht beendet ist, also alle Daten abgerufen sind, sind alle betroffenen Tabellen insgesamt gegen veränderungen gesperrt.
    Das selbe gilt für alle Update/Delete/Inserts. Diese sperren die Tabellen bis ein Commit/Rollback durchgeführt wird.
    Dadurch erklären sich auch manche seltsamen SQL-Konstrukte dieser DB.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2009
    Beiträge
    319
    Vielen Dank an Birgitta

    Grüße
    Dschainers

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •