Jag har problem med den här SQL-frågan. Den söker igenom en kategori och underliggande kategorier efter användare. Problemet är bara att samma användare kan finnas i flera kategorier (genom en referenstabell). Så när man söker får man upp samma användare flera gånger.
SELECT * FROM tblM_Address a
INNER JOIN tblM_AddressReference r
ON a.AddressId = r.AddressRefAddressId
AND (r.AddressRefCategoryId = 3 OR r.AddressRefCategoryId IN (12,16,13,15,14,17,19))
WHERE AddressSiteId = 4
AND AddressXModuleId = 276
AND (AddressFirstName LIKE '%erik%'
OR AddressLastName LIKE '%erik%'
OR AddressCompany LIKE '%erik%'
OR AddressPhone LIKE '%erik%'
OR AddressMobile LIKE '%erik%'
OR AddressEmail LIKE '%erik%'
OR AddressHomePage LIKE '%erik%'
OR AddressStreet LIKE '%erik%'
OR AddressZipCode LIKE '%erik%'
OR AddressCity LIKE '%erik%'
OR AddressCountry LIKE '%erik%'
OR AddressComment LIKE '%erik%')
ORDER BY AddressFirstName
Jag försökte slänga in en GROUP BY AddressId i mellanrummet.
Men då får jag en massa såna här meddelanden:
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.AddressXModuleId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Och snälla, gör inte om frågan alltför mycket eftersom att jag då måste gå in och ändra den VB-koden som genererar den här SQL:en. Och jag vill gärna slippa ändra allt.
Tack på förhand... :)
Redigerat för att öka läsbarheten /Lars
Skrev så här nu, vilket ju funka, men är en helt hemsk lösning.
SELECT AddressId, AddressXModuleId, AddressSiteId, AddressFirstName, AddressLastName, AddressCompany, AddressPhone, AddressMobile,
AddressEmail, AddressHomePage, AddressStreet, AddressZipCode, AddressCity, AddressCountry, AddressCreationDate
FROM tblM_Address a
INNER JOIN tblM_AddressReference r
ON a.AddressId = r.AddressRefAddressId
AND (r.AddressRefCategoryId = 3 OR r.AddressRefCategoryId IN (12,16,13,15,14,17,19))
WHERE AddressSiteId = 4
AND AddressXModuleId = 276
AND (AddressFirstName LIKE '%erik%'
OR AddressLastName LIKE '%erik%'
OR AddressCompany LIKE '%erik%'
OR AddressPhone LIKE '%erik%'
OR AddressMobile LIKE '%erik%'
OR AddressEmail LIKE '%erik%'
OR AddressHomePage LIKE '%erik%'
OR AddressStreet LIKE '%erik%'
OR AddressZipCode LIKE '%erik%'
OR AddressCity LIKE '%erik%'
OR AddressCountry LIKE '%erik%'
OR AddressComment LIKE '%erik%')
GROUP BY AddressId, AddressXModuleId, AddressSiteId,
AddressFirstName, AddressLastName, AddressCompany,
AddressPhone, AddressMobile, AddressEmail,
AddressHomePage, AddressStreet, AddressZipCode,
AddressCity, AddressCountry, AddressCreationDate
ORDER BY AddressFirstName
Hoppas någon kan komma med en smidigare! :)
Redigerat för att öka läsbarhet/Lars
LarsGMedlem sedan dec. 200012 464 inlägg Varför vill du ha med group by? Som det är nu så är din fråga samma som om du hade använt select distinct.
PS: Skriv inte så långa rader.
Aha, SELECT DISTINCT AddressId, AddressXModuleId o.s.v. ?
Men jag vill liksom använda SELECT *...
Och sen är det AddressId som ska vara unikt.
LarsGMedlem sedan dec. 200012 464 inlägg Nu när det går att läsa ditt inlägg så frågar jag mig varför du har så många olika adresskolumner. Jag skulle lägga det separat,
LarsGMedlem sedan dec. 200012 464 inlägg Varför är det problem om du får upp samma adressid flera gånger? Det är ju väldigt mycket enklare att gruppera ihop det på klientsidan än att göra det i SQL (i de flesta fall.)