7 messaggi dal 29 agosto 2005
Rieccomi di nuovo a chiedere il vostro aiuto, ho un db con 2 query, immobili e cliente, devo fare un recordset con un join tra le due query del tipo :
"SELECT * FROM cliente as CL, immobili as IM WHERE IM.Comune like '%CL.Comune%'"
Il problema è che non mi funziona il '%CL.Comune%', se inserisco un dato in manuale oppure lo faccio prendere da una variabile funziona, mentre se cerco direttamente dalla seconda query non funziona.
Potete gentilmente aiutarmi.
Ciao e grazie in anticipo
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Con la query che hai scritto stai cercando i record dove il campo IM.Comune contiene la STRINGA "CL.Comune". Se vuoi cercare i record dove il campo IM.Comune contenga il VALORE del campo CL.Comune devi trasformare la condizione di ricerca in

WHERE IM.Comune like '%' + CL.Comune + '%'

Bye
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
aswi wrote:
Rieccomi di nuovo a chiedere il vostro aiuto, ho un db con 2 query, immobili e cliente, devo fare un recordset con un join tra le due query del tipo :
"SELECT * FROM cliente as CL, immobili as IM WHERE IM.Comune like '%CL.Comune%'"
Il problema è che non mi funziona il '%CL.Comune%', se inserisco un dato in manuale oppure lo faccio prendere da una variabile funziona, mentre se cerco direttamente dalla seconda query non funziona. Potete gentilmente aiutarmi.
Ciao e grazie in anticipo

l'operatore LIKE prevede un valore "costante" (un literal) e non l'utilizzo di una colonna separata... tra parentesi, cosi' come hai scritto tu non viene eseguito, ad esempio
WHERE IM.Comune LIKE '%Riccione%'
dove CL.Comune = Riccione ma proprio un confronto letterale
WHERE IM.Comune LIKE '%CL.Comune%'
dove 'CL.Comune' e' proprio un literal..
potresti pero' risolvere, senza passare per SQL Dinamico, con un altro tipo di confronto, utilizzando ad esempio CHARINDEX/POSINDEX, similarmente a (in T-SQL)
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
Id int,
Comune varchar(10)
);
CREATE TABLE dbo.t2 (
Id int,
Comune varchar(10)
);
INSERT INTO dbo.t VALUES ( 1, 'Roma' );
INSERT INTO dbo.t VALUES ( 2, 'Milano' );
INSERT INTO dbo.t VALUES ( 3, 'Torino' );
INSERT INTO dbo.t VALUES ( 4, 'Palermo' );
INSERT INTO dbo.t VALUES ( 5, 'Palermo XX' );
INSERT INTO dbo.t VALUES ( 6, 'Milano 2' );

INSERT INTO dbo.t2 VALUES ( 1, 'Milano' );
INSERT INTO dbo.t2 VALUES ( 2, 'Torino' );
INSERT INTO dbo.t2 VALUES ( 3, 'Palermo' );
INSERT INTO dbo.t2 VALUES ( 4, 'Olbia' );
GO
SELECT *
FROM dbo.t t, dbo.t2 t2
WHERE CHARINDEX(t2.Comune, t.Comune) <> 0;
GO
SELECT *
FROM dbo.t t
JOIN dbo.t2 t2 ON CHARINDEX(t2.Comune, t.Comune) <> 0
GO
DROP TABLE dbo.t, dbo.t2;
--<----------
Id Comune Id Comune
---------
--------
---------
----------
2 Milano 1 Milano
6 Milano 2 1 Milano
3 Torino 2 Torino
4 Palermo 3 Palermo
5 Palermo XX 3 Palermo

Id Comune Id Comune
---------
--------
---------
----------
2 Milano 1 Milano
6 Milano 2 1 Milano
3 Torino 2 Torino
4 Palermo 3 Palermo
5 Palermo XX 3 Palermo

personalmente non amo molto l'espressione di join che hai utilizzato in sintassi ANSI 89 e preferisco, come nel secondo esempio, la sintassi 92, molto piu' chiara anche se in effetti, solitamente, il risultato a livello di piano di esecuzione e' invariato, ma rende chiaro che, come nel tuo caso, non si sta esprimendo un filtro sulla clausola where ma si sta a tutti gli effetti operando un'aggregazione di join tra 2 diverse entita'..
altra perplessita' riguarda l'utilizzo a tutti gli effetti dell'operatore LIKE... cio' sottointende che nel risultato per il "filtro" su "Milano" tu desideri riscontrare :
"Milano", "Milano 2", "Milano (centro)", "fuori Milano", "Milano Melegnano", .....
posso capire che i valori tra le 2 tabelle possano non essere completamente "omogenei", ma non vedo l'esigenza (senza conoscere i dati) di tale operatore..

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
7 messaggi dal 29 agosto 2005
Scusami ma purtroppo non è ch c'abbia capito un granchè, c'è qualche possibilità di farlo senza usare t-sql?

Attendo notizie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
aswi ha scritto:
Scusami ma purtroppo non è ch c'abbia capito un granchè, c'è qualche possibilità di farlo senza usare t-sql?

Attendo notizie


che sia T-SQL o altro linguaggio SQL, questo dipende dal dbms che tu stai utilizzando... ma al di la' di cio', visto che stai scrivendo una query SQL, sicuramente devi restare in quest'ambito e non, ad esempio, nel codice applicativo.. ma forse ho interpretato male la tua richiesta..
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.