webForumDet fria alternativet

Slå ihop 3 kolumner så man får dem sökbara

Databaser & SQL

4 svar · 277 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hej!

Vet att jag har löst detta innan, men kan inte hitta hur man gjorde.

Jag söker på 5 kolumner i en databas, från 3 olika tabeller. I en tabell finns förnamn, efternamn och mellannamn. Jag vill kunna söka på Johan Andersson men det får jag ju inte några träffar på om jag skriver på följande sätt

strSQL = "SELECT dbo.Distributors.Name, dbo.CountryName.CountryName_GB, dbo.DistributorContacts.ForeName, dbo.DistributorContacts.MiddleName, dbo.DistributorContacts.LastName, dbo.DistributorContacts.Title  "_
&"FROM dbo.DistributorContacts INNER JOIN dbo.Distributors ON dbo.DistributorContacts.DistId = dbo.Distributors.DistId INNER JOIN dbo.CountryName ON dbo.Distributors.Countryname_ID = dbo.CountryName.CountryName_ID "_
&"WHERE Name LIKE '%" & strSearch & "%' OR CountryName_GB LIKE '%" & strSearch & "%' OR ForeName LIKE '%" & strSearch & "%' OR MiddleName LIKE '%" & strSearch & "%' OR LastName LIKE '%" & strSearch & "%' "_

Eftersom om man söker på namn så söker man på 3 kolumner; för, mellan och efternamn så får man ingen träff om man inte söker på enbart johan eller andersson

Jag vill alltså slå ihop för, mellan och efternamn till en kolumn i frågan och köra en LIKE på den.

Om jag slår ihop dem på följande sätt får jag ju dem i en "fake" kolumn men den kan jag sen inte köra en like på.

dbo.DistributorContacts.ForeName + ' ' + dbo.DistributorContacts.LastName AS ContactName

Någon som kan friska upp mitt minne om hur man gjorde.

Medlem sedan dec. 200012 464 inlägg
#2
where dbo.DistributorContacts.ForeName + ' ' + dbo.DistributorContacts.LastName = 'Johan Andersson'

eller

select * from (select dbo.DistributorContacts.ForeName + ' ' + dbo.DistributorContacts.LastName AS ContactName from t) s
where s.contactName = 'Johan Andersson'
Medlem sedan dec. 19996 522 inlägg
#3

tack larsg, men det blir inte som jag tänkt mig ritkigt..

Jag har följande sql fråga.

SELECT     dbo.Distributors.Name, dbo.CountryName.CountryName_GB, dbo.DistributorContacts.ForeName, dbo.DistributorContacts.LastName, dbo.DistributorContacts.Title
FROM         dbo.DistributorContacts INNER JOIN
                      dbo.Distributors ON dbo.DistributorContacts.DistId = dbo.Distributors.DistId INNER JOIN
                      dbo.CountryName ON dbo.Distributors.Countryname_ID = dbo.CountryName.CountryName_ID

Jag har variabeln strSearch

Skriver jag "johan" vill ja ju få fram alla för, efternamn, företagsnamn som innehåller ordet johan. Skriver jag "johan and" vill jag få fram alla "johan andersson" samt "johan anderson" samt kanske om det finns ett företagsnamn som heter "Johan And Anders company".

Som det är nu får jag ju bara rätt om jag enbart skriver "johan" eller "andersson"

Tack för hjälpen
mvh
Erik

Medlem sedan dec. 200012 464 inlägg
#4
strSearch = replace(strSearch," ","%")
q = "select * from (select dbo.DistributorContacts.ForeName + ' ' + dbo.DistributorContacts.LastName AS ContactName from t) s
where s.contactName like '%" & strSearch & "%'"

kanske?

Medlem sedan dec. 19996 522 inlägg
#5

Löste det genom att göra följande sp

CREATE PROCEDURE [spSearchContact]
@strSearch Varchar(200)

AS

SELECT     dbo.Distributors.Name, dbo.CountryName.CountryName_GB, dbo.DistributorContacts.ForeName, dbo.DistributorContacts.LastName, 
		dbo.DistributorContacts.Title, dbo.DistributorContacts.ContactId, dbo.DistributorContacts.DistId
FROM         dbo.DistributorContacts INNER JOIN
                      dbo.Distributors ON dbo.DistributorContacts.DistId = dbo.Distributors.DistId INNER JOIN
                      dbo.CountryName ON dbo.Distributors.Countryname_ID = dbo.CountryName.CountryName_ID
WHERE (dbo.DistributorContacts.ForeName + ' ' + dbo.DistributorContacts.LastName LIKE '%' + @strSearch + '%' ) OR (dbo.CountryName.CountryName_GB LIKE '%' + @strSearch + '%' ) 
	OR (dbo.Distributors.Name LIKE '%' + @strSearch + '%' ) 

ORDER BY dbo.DistributorContacts.ForeName, dbo.DistributorContacts.LastName, dbo.CountryName.CountryName_GB
GO

Sen när jag skickar söksträngen till spn tar jag bort mellanslag och ersätter det med % tecken och det funkar perfa

tack larsg för all hjälp, du är en klippa

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)