Problemas com SELECT NO MYSQL

3 respostas
EderBz
CREATE TABLE `Usuarios` (
  `CodUsuario` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `NomeUsuario` VARCHAR(50) NULL,
  `Login` VARCHAR(10) NULL,
  `senha` VARCHAR(10) NULL,
  PRIMARY KEY(`CodUsuario`)
);

CREATE TABLE `Modulo` (
  `CodModulo` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `NomeModulo` VARCHAR(50) NULL,
  `CaminhoModulo` VARCHAR(255) NULL,
  `descricao` TEXT NULL,
  PRIMARY KEY(`CodModulo`)
);

CREATE TABLE `UsuariosModulo` (
  `CodUsuario` INTEGER UNSIGNED NOT NULL,
  `CodModulo` INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(`CodUsuario`, `CodModulo`),
  FOREIGN KEY(`CodUsuario`)
    REFERENCES `Usuarios`(`CodUsuario`)
      ON DELETE CASCADE
      ON UPDATE CASCADE,
  FOREIGN KEY(`CodModulo`)
    REFERENCES `Modulo`(`CodModulo`)
      ON DELETE CASCADE
      ON UPDATE CASCADE
);

Possuo este relacionamentos entre as tabelas modulo e usuarios (N:M) conforme os creates acima
não consigo executar a seguinte consuta no mysql vejam:

SELECT * FROM MODULO WHERE CodModulo IN (SELECT CodModulo FROM USUARIOSMODULO WHERE CodUsuarios = 1);

o Mysql me sa o seguinte resultado :

"You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT CodModulo FROM USUARIOSMODULO WHERE CodUsuarios = 1)' at"

o que faço ?

3 Respostas

Zeed01

Testei o select e não recebi nenhuma mensagem de erro:

Retorno do MySQL:

CodModulo NomeModulo
1 Login
2 CadastroUsuario

No entanto se a intenção é só trazer os módulos que um usuário tem acesso não seria melhor fazer assim:

Select Modulo.*
from Modulo,
UsuarioModulo
where Modulomo_moId = um_moId and
um_usId = 1;

Select mo.*
from Modulo mo,
UsuarioModulo um
where mo.CodModulo = um.CodModulo and
um.CodUsuario = 1;

Um abraço,

EderBz

Obrigado, valeu mesmo !
O seu rodou que foi uma blz.

E o meu funcionou ?
Da maneira certa ?

Aqui ele deu erro .

Zeed01

O seu select também funcionou aqui…

Só que como eu adaptei para duas tabelas que eu já tinha para não ter que criar tudo do zero, não sei se tem algum problema como nome de campo ou de tabela errado.

Eu recebi essa mensagem sua numa das tentativa em que coloquei o nome da tabela UsuarioModulo errado…

Eu só mudei o select porque fiquei pensando o seguinte: e se o join entre as duas tabelas fosse feito através de 2 ou mais campos ? Como ficaria o seu select ?

Um abraço.

Criado 4 de junho de 2007
Ultima resposta 4 de jun. de 2007
Respostas 3
Participantes 2