Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/06/2008, 02:22
watxu
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 16 años
Puntos: 0
Una SELECT para nota.

A ver si me puede ayudar algun@. Presento mi escenario

Es una base de datos de conocimiento. 3 tablas relacionadas.

La primera guarda el conocimiento en sí.

KnowHow
ID
Título
Texto
(hay más pero pongo solo estos, para abreviar)

Claro que no todo el mundo tiene que ser capaz de verlo, por lo que tengo otra tabla
KnowHowShare
ID
KnowHowID (FK contra KnowHow.ID)
WorkGroupID(FK contra WorkGroups)

Así, un KnowHow puede estar compartido con varios grupos, OK?
Lógicamente hay una tabla WorkGroups de la que extraigo el nombre del grupo ETC. No la pongo para abreviar...de todas maneras no la necesitamos ahora.

Pero es que...un usuario puede pertenecer a mas de un grupo. Por lo que tengo la siguiente tabla

UserWorkGroups
ID
username
WorkGroupID

Luego, un usuario pertenece a uno o varios grupos (por lo menos uno, eso si) y un knowHow esta compartido con uno o mas grupos.

Se trata de extraer aquellos registros que pueda ver un usuario en concreto, no seleccionando los demas.
Para ello tengo el siguiente SP

ALTER PROCEDURE [dbo].[dhlkb_KnowHow_KnowHow_GetKnowHowByCatID] (

@UserName as nvarchar(256))

AS

SET NOCOUNT ON

SELECT KnowHow.KnowHowID, KnowHow,Titulo, KnowHow.Texto
FROM DHLKB_KnowHow INNER JOIN
KnowHow_Shares ON KnowHow.KnowHowID = KnowHow_Shares.KnowHowID
WHERE (KnowHow_Shares.WorkGroupID IN
(SELECT WorkGroupID
FROM UserWorkgroups
WHERE (LOWER(UserName) = LOWER(@UserName))))

El problema de esto, es que si un know how esta compartido con varios grupos, se repiten tantos registros como coincidencias haya con los grupos de ese usuario.

Es decir...si el knowHow ID 1, esta compartido con el grupo 10,11,12,13 y el usuario esta en el grupo 10,11 y 13, ese registro saldra repetido 3 veces.

Se le ocurre a alguien alguna manera de hacer esto sin usar un distinct? No se, pero me da que el rendimiento caera bastante cuando empiece a crecer la BDD, y compare textos monstruosos que se de antemano son iguales.

Espero me haya expresado bien.