Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gdias

Querido e maldito INNER JOIN

Recommended Posts

Salve amigos...Mais uma vez preciso da ajuda de vcs...Seguinte, eu tenho uma tabela que lista ferramentas de sistema (FAQ, Textos Informativos, Download, Agenda, entre outros e chama-se TAB_FerramentaBeleza... eu tenho um usuário que tem acesso a n´s ferramentas e quando eu acesso uma página para atualizar (UP DATE) eu preciso que seja listado as ferramentas que ele usa mais as que ele tem direito a uso mas que não estão selecionadas...Já tentei INNER JOIN mas não consegui... já tentei IF ELSE (ASP) e não deu certo...Por favor, me ajudemTAB_FERRAMENTAS é composta pelos campos• PK_FERRAMENTA - ex: textos_informativos• LABEL_FERRAMENTA - ex: Textos InformativosTAB_ACESSO_FERRAMENTAS é composta pelos campos• FK_FERRAMENTA - ex: textos_informativos• FK_ID_CONTEXTO - ex: id do usuário = 8 por exemploO parametro que eu passo é o FK_ID_CONTEXTOPreciso de uma listagem trazendo todas as ferrametas que o usuário usa em checkbox (CHECKED) e as outras ferramentas sem o CHECKEDOs dois selects que precisam ser misturados (INNER JOIN) são:select PK_FERRAMENTA from TAB_FERRAMENTASselect FK_FERRAMENTA from TAB_ACESSO_FERRAMENTAS where FK_ID_CONTEXTO = '8'Desde já obrigado,Gustavo

Compartilhar este post


Link para o post
Compartilhar em outros sites

HUm.. tenta isso....tenho algo parecido aqui..select PK_FERRAMENTAfrom TAB_FERRAMENTAS left outer join TAB_ACESSO_FERRAMENTASon pk_ferramenta = fk_ferramenta and fk_id_contexto = '8'tenta ai e da um retorno!Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve iuriag...retorna todos as ferramantas de TAB_FERRAMENTAS e eu preciso só daquela que o usuário não tem acesso...valeu pelo interesse.Abraços,gustavo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Gustavo.

 

Se entendi bem seu problema, você quer que sejam retornados todas as ferramentas disponíveis, porém você quer identificar aquelas que estão disponíveis para um usuário 'X' e aquelas que não estão.

 

Creio que este script resolva seu problema (montei o script todo para melhor exemplificar):

 

Create Table TAB_FERRAMENTAS

(

PK_FERRAMENTA VarChar(30) NOT NULL,

LABEL_FERRAMENTA VarChar(50) NOT NULL,

Constraint PK_TABFER Primary Key Clustered

(

PK_FERRAMENTA

)

)

GO

Create Table TAB_CONTEXTO

(

ID_CONTEXTO Int NOT NULL,

NOME_CONTEXTO VarChar(30) NOT NULL,

Constraint PK_CONTEXTO Primary Key Clustered

(

ID_CONTEXTO

)

)

GO

 

Create Table TAB_ACESSO_FERRAMENTAS

(

PK_FERRAMENTA VarChar(30) NOT NULL,

ID_CONTEXTO Int NOT NULL,

Constraint PK_ACESSO Primary Key Clustered

(

PK_FERRAMENTA,

ID_CONTEXTO

),

Constraint FK_FERRAMENTA Foreign Key

(

PK_FERRAMENTA

) References TAB_FERRAMENTAS

(

PK_FERRAMENTA

),

Constraint FK_CONTEXTO Foreign Key

(

ID_CONTEXTO

) References TAB_CONTEXTO

(

ID_CONTEXTO

)

)

GO

 

Insert Into TAB_FERRAMENTAS (PK_FERRAMENTA, LABEL_FERRAMENTA) Values ('textos_informativos', 'textos informativos')

Insert Into TAB_FERRAMENTAS (PK_FERRAMENTA, LABEL_FERRAMENTA) Values ('downloads', 'Download de arquivos')

Insert Into TAB_FERRAMENTAS (PK_FERRAMENTA, LABEL_FERRAMENTA) Values ('agenda', 'Agenda do usuário')

GO

Insert Into TAB_CONTEXTO (ID_CONTEXTO, NOME_CONTEXTO) Values (1, 'Usuario 1')

Insert Into TAB_CONTEXTO (ID_CONTEXTO, NOME_CONTEXTO) Values (2, 'Usuario 2')

Insert Into TAB_CONTEXTO (ID_CONTEXTO, NOME_CONTEXTO) Values (3, 'Usuario 3')

GO

Insert Into TAB_ACESSO_FERRAMENTAS (PK_FERRAMENTA, ID_CONTEXTO) Values ('textos_informativos', 1)

Insert Into TAB_ACESSO_FERRAMENTAS (PK_FERRAMENTA, ID_CONTEXTO) Values ('downloads', 1)

Insert Into TAB_ACESSO_FERRAMENTAS (PK_FERRAMENTA, ID_CONTEXTO) Values ('agenda', 2)

GO

 

Select fer.PK_FERRAMENTA As 'Ferramenta', ace.ID_CONTEXTO As 'Usuario', 'TRUE' As 'Checked'

From TAB_FERRAMENTAS fer Left Join TAB_ACESSO_FERRAMENTAS ace On fer.PK_FERRAMENTA = ace.PK_FERRAMENTA

Where ID_CONTEXTO = 1

GO

Select fer.PK_FERRAMENTA As 'Ferramenta', ace.ID_CONTEXTO As 'Usuario', 'FALSE' As 'Checked'

From TAB_FERRAMENTAS fer Left Join TAB_ACESSO_FERRAMENTAS ace On fer.PK_FERRAMENTA = ace.PK_FERRAMENTA

And ace.ID_CONTEXTO = 1

Where ace.ID_CONTEXTO Is NULL

GO

 

Drop Table TAB_ACESSO_FERRAMENTAS

Drop Table TAB_FERRAMENTAS

Drop Table TAB_CONTEXTO

 

O ponto para você identificar o que o usuário não tem é onde aparece NULL no ID do contexto (em azul).

 

Espero ter ajudado.

 

Att

 

Marcus Vinícius de Aguiar Magalhães

DBA Sr. MS SQL Server/Sybase

Compartilhar este post


Link para o post
Compartilhar em outros sites

A todos os amigos,Marcus, Iuriag e AroldoMuito obrigado pela atenção dispensada.Consegui fazer o select que precisava e gostari de compartilhar com vcs a solução aplicada:select TAB2.LABEL_FERRAMENTA, TAB2.PK_FERRAMENTA, TAB1.FK_ID_CONTEXTO from TAB_FERRAMENTAS TAB2left join TAB_ACESSO_FERRAMENTAS TAB1on (TAB1.FK_FERRAMENTA = TAB2.PK_FERRAMENTA)and (FK_ID_CONTEXTO = '8')Com esse select a ferramenta não utilizada pelo ID=8 (no caso) retorna como NULL... fiz um IF ELSE no ASP e tratei Checked UnCheckedMais uma vez obrigado e até a próximaAbraços,Gustavo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.