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