6 messaggi dal 10 giugno 2012
Ciao,

se da una SELECT mi risultasse un campo avente diversi record con valori identici mentre gli altri campi fossero differenti come potrei creare una query di UPDATE andando a diversificare i campi uguali aggiungendo un valore estrapolato dalla stessa select?

Per esempio:

io dalla query:

SELECT*
FROM `jos_acesef_urls`
WHERE `url_sef` LIKE 'ristoranti/2000'

ottengo:

id | url_sef | city

1 ristorante/2000 Milano
2 ristorante/2000 Roma
3 ristorante/2000 Palermo


come potrei modificare il valore url_sef in questo modo?

id | url_sef | city

1 ristorante/2000-Milano Milano
2 ristorante/2000-Roma Roma
3 ristorante/2000-Palermo Palermo

ciao e grazie...
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
non so se ho ben capito il problema, ma nel caso non e' complicato..
ti basta fare un update con concatenazione di valori dalle colonne base applicato con lo specifico filtro a te interessante... tipicamente,
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
  Id int NOT NULL,
  url_sef varchar(30),
  city varchar(30)
  );
GO
INSERT INTO dbo.t
  VALUES ( 1 , 'ristoranti/2000', 'Milano' ), ( 2, 'ristoranti/2000', 'Roma' ), ( 3 , 'ristoranti/2000', 'Palermo' ),
  ( 4, 'ristoranti/2000', 'non ci sta tutto nella riga' ),
  ( 5, 'altro', 'Riccione' );
GO
SELECT *
  FROM dbo.t
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
UPDATE dbo.t
  SET url_sef = url_sef + ' ' + city
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
SELECT *
  FROM dbo.t
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
UPDATE dbo.t
  SET city = 'xx'
  WHERE Id = 4;
GO
SELECT *
  FROM dbo.t
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
UPDATE dbo.t
  SET url_sef = url_sef + ' ' + city
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
SELECT *
  FROM dbo.t
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
UPDATE dbo.t
  SET url_sef = url_sef + CASE WHEN LEN( url_sef + ' ' + city ) >30 THEN '' ELSE ' ' + city END
  WHERE url_sef LIKE 'ristoranti/2000%';
GO
DROP TABLE dbo.t;


come vedi, nel caso in esame, c'e' pero' un problema in quanto una colonna contiene un valore che, aggiunto alla colonna di origine, eccede il dimensionamento della colonna in aggiornamento, quindi dovresti controllare l'operazione come nell'ultimo esempio in esame ed effettuare gli opportuni accorgimenti in modifica, pena il fallimento dell'operazione...

giusto come appunto, il filtro LIKE 'valore' vorrei intenderlo come un refuso dell'esempio da te apportato, in quanto non ha tecnicamente ragione di esistere un filtro LIKE che preveda un'uguaglianza assoluta... sarebbe preferibile utilizzare l'operatore di uguaglianza "=" e basta, al di la' che l'optimizer del dbms da te utilizzato molto probabilmente sara' in grado di valutare autonomamente il refuso e definire riformulandolo il piano di esecuzione approssimandolo all'operazione di uguaglianza assoluta...

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
6 messaggi dal 10 giugno 2012
SELECT*
Ciao Andrea e grazie ancora per l'attenzione, mi sono accorto però di non essermi spiegato in maniera chiara in quanto teoricamente non dovrei utilizzare nessun tipo di filtro. Infatti vorrei riuscire a differenziare tutti i gruppi di valori differenti fra loro a prescindere attraverso una query. L'esempio corretto sarebbe:


SELECT * FROM `jos_acesef_urls`

ottengo:

id | url_sef | city

1 ristorante/2000 Milano
2 ristorante/2000 Roma
3 ristorante/2000 Palermo
4 ristorante/3000 Napoli
5 ristorante/4000 Cagliari
6 ristorante/5000 Torino

la tabella in realtà contiene 100.000 record e io non sò quali hanno l'url_sef uguale e quali no quindi devo essere il più generico possibile e dovrei modificare solo quelli uguali tra loro nell'url_sef. Il risultato atteso dovrebbe essere:

id | url_sef | city

id | url_sef | city

1 ristorante/2000-Milano Milano
2 ristorante/2000-Roma Roma
3 ristorante/2000-Palermo Palermo
4 ristorante/3000 Napoli
5 ristorante/4000 Cagliari
6 ristorante/5000 Torino

inoltre essendo parecchio limitato mi chiedevo se era possibile cavarsela con una o due query in quanto non saprei come utilizzare uno script. Grazie per la pazienza e scusa se sono stato poco chiaro...
Ciao
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
non so se ho ben compreso...
diciamo che vuoi aggiornare la colonna [url_sef] della tabella impostandola a [url_sef] + [city] se e solo se la colonna [url_sef] LIKE 'ristorante/2000%'
se questo e' corretto, allora la query prima indicata,
UPDATE dbo.t
  SET url_sef = url_sef + ' ' + city
  WHERE url_sef LIKE 'ristoranti/2000%';

e' altresi' corretta... diversamente non ho purtroppo compreso cosa vuoi ottenere..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.