2013-07-01 21 views
5

próbuję uruchomić UPDATE kwerendy w programie Access z różnymi WHERE warunków:UPDATE z wielokrotności GDZIE warunki

UPDATE Table1 
SET [Ticker] = "TXSFI" WHERE [Acct Numb] like "*03", 
SET [Ticker] = "TESEI" WHERE [Acct Numb] like "*04"; 

Dlaczego pojawia się błąd?

+2

Wykorzystanie ' '' zamiast '" 'SQL ciąg literały – Andomar

+3

Nie można mieć 2' where' klauzule 1 zapytanie. –

+0

dzięki za odpowiedź, ale gdy próbuję wykonać to, że jest pokazujący błąd jako brakujący operator – user2520291

Odpowiedz

7

Można to zrobić z oświadczeniem dwa aktualizacja:

UPDATE Table1 
    SET Table1.[Ticker] = 'TXSFI' WHERE Table1.[Acct Numb] like '*03'; 

Update Table1 
    SET Table1.[Ticker] = 'TESEI' WHERE Table1.[Acct Numb] like '*04'; 

Można też łączyć te za pomocą aktualizacji warunkowe (wersja non-Access):

update table1 
    SET Table1.[Ticker] = (case when Table1.[Acct Numb] like '%03' then 'TXSFI' 
           when Table1.[Acct Numb] like '%04' then 'TESEI' 
          end) 
    where Table1.[Acct Numb] like '%03' or Table1.[Acct Numb] like '%04' 

Nawiasem mówiąc, jestem zgadywania używasz programu Access. Standardowym symbolem wieloznacznym w SQL byłby like '%03', ale Access używa '*' zamiast '%'. Dobrym pomysłem jest oznaczenie swojego pytania bazą danych, z której korzystasz.

Mimo, że nie można używać case Access:

update table1 
    SET Table1.[Ticker] = iif(Table1.[Acct Numb] like '*03', 'TXSFI', 'TESEI') 
    where Table1.[Acct Numb] like '*03' or Table1.[Acct Numb] like '*04' 
+0

Dzięki. Pierwsza działa dobrze dla mnie Niestety dla niepełnego pytania Tak, używam Access dla moje zapytanie, jeszcze raz dziękuję, naprawdę docenione, – user2520291

+0

AKTUALIZACJA Tabela 1 SET Tabela1. [Ticker_Symbol_Id] = 'DUMMY' GDZIE Tabela 1. [Numerek aks] nie jest podobna ('* 01'. '* 03'. '* 04'. '* 07 '.' * 08 '.' * 09 '); Czy nie możemy użyć niepodobnej instrukcji w kwerendzie aktualizacji? – user2520291

1

Jest możliwe, aby to zrobić z jednego pojedynczego zapytania (bez zagnieżdżania IIF s), bez względu na to, jak wiele różnych WHERE klauzule ty mieć.

Jest to podobne do tego, co opisałem w my answer here (second part):

  1. utworzyć tabelę tymczasową, która wygląda tak:

    Acct Numb  NewTicker 
    ------------------------- 
    *03   TXSFI 
    *04   TESEI 
    

    Można wprowadzić taką liczbę nowych wierszy, jak chcesz, z których każdy z "wartością filtru" dla numeru konta i nową wartością Ticker.

  2. Aktualizacja wszystkie wartości w Table1 z tym jednym zapytaniu:

    UPDATE Table1 
    INNER JOIN tmp ON Table1.[Acct Numb] LIKE tmp.[Acct Numb] 
    SET Table1.Ticker = tmp.NewTicker; 
    

    Tak, JOIN część wygląda dziwnie na pierwszy rzut oka, ale it's actually possible to join with LIKE.

  3. Możesz usunąć tabelę tymczasową ponownie, gdy skończysz.