2013-07-01 16 views
5

sto cercando di eseguire una query in Access UPDATE con diverse WHERE condizioni:UPDATE con più condizioni WHERE

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

Perché ricevo un errore?

+2

Usa ' '' invece di '" 'per stringhe SQL – Andomar

+3

Non si può avere 2' WHERE' clausole in 1 query. –

+0

Grazie per la risposta, ma quando sto cercando di eseguire questo, è mostra l'errore come operatore mancante – user2520291

risposta

7

Si può fare questo con dichiarazione di due update:

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

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

In alternativa, è possibile combinare questi con aggiornamenti condizionali (versione 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' 

A proposito, sto indovinando che stai usando Access. Il carattere jolly standard in SQL sarebbe like '%03' ma Access utilizza uno '*' anziché '%'. È una buona idea taggare la tua domanda con il database che stai utilizzando.

Detto questo, non è possibile utilizzare case in 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

Grazie. 1o sta funzionando bene per me. Mi spiace per domanda incompleta. Sì, sto usando Access per la mia richiesta Grazie ancora Apprezzato. – user2520291

+0

UPDATE Table1 SET Table1. [Ticker_Symbol_Id] = 'DUMMY' WHERE Table1. [Acct Numb] non come ('* 01'. '* 03'. '* 04'. '* 07 '.' * 08 '.' * 09 '); Non possiamo usare non come istruzione nella query di aggiornamento? – user2520291

1

E 'possibile farlo con una singola query (senza annidamento IIF s), non importa quanti diversi WHERE clausole voi avere.

Questo è simile a quello che ho descritto in my answer here (second part):

  1. creare una tabella temporanea che assomiglia a questo:

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

    È possibile inserire gli nuove righe come si desidera, ognuno con un "valore filtro" per il numero di conto e un nuovo valore Ticker.

  2. aggiornamento di tutti i valori in Table1 con questo singola query:

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

    Sì, la parte JOIN guarda strano a prima vista, ma it's actually possible to join with LIKE.

  3. È possibile eliminare nuovamente la tabella temporanea quando hai finito.

Problemi correlati