Ir para conteúdo

Arquivado

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

razs

relacionar colunas

Recommended Posts

Pessoal estou a tentar fazer uma relação entre duas colunas em tabelas diferentes, alguem percebe o que estou a fazer de mal??

 

CREATE TABLE pat123 (
   id int(11) NOT NULL AUTO_INCREMENT,
   Pat_Numb varchar(10) DEFAULT NULL,
   data varchar(11) DEFAULT NULL,
   up_by varchar(45) DEFAULT NULL,
   PRIMARY KEY (id),
   FOREIGN KEY (Pat_Numb) 
   REFERENCES visits (Pat_Numb) delimiter $$
)  ENGINE=InnoDB DEFAULT CHARSET=utf8$$

 

Já agora como faço para relacionar este campo com o mesmo em 4 tabelas?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o erro, o campo Pat_Numb é igual em todas as tabelas.

 

0 15:22:53 CREATE TABLE pat123 ( id int(11) NOT NULL AUTO_INCREMENT, Pat_Numb varchar(10) DEFAULT NULL, data varchar(11) DEFAULT NULL, up_by varchar(45) DEFAULT NULL, PRIMARY KEY (id), FOREIGN KEY (Pat_Numb) REFERENCES visits (Pat_Numb), ) Error Code: 1064. 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 ')' at line 9

 

a linha 9 é a ultima

 

ENGINE=InnoDB DEFAULT CHARSET=utf8$$

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

No final do seu comando há uma vírgula que parece que não deveria estar lá.

 

FOREIGN KEY (Pat_Numb) REFERENCES visits (Pat_Numb), )

Compartilhar este post


Link para o post
Compartilhar em outros sites

continua na mesma :s

 

 

 

0 16:10:13 CREATE TABLE pat123 ( id int(11) NOT NULL AUTO_INCREMENT, Pat_Numb varchar(10) DEFAULT NULL, data varchar(11) DEFAULT NULL, up_by varchar(45) DEFAULT NULL, PRIMARY KEY (id), FOREIGN KEY (Pat_Numb) REFERENCES visits (Pat_Numb) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 Error Code: 1005. Can't create table 'corc2.pat123' (errno: 150)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesma coisa não, erros diferentes.

 

Sua tabela visits existe? Já verificou se o tipo e tamanho estão iguais?

 

If you re-create a table that was dropped, it must have a definition that conforms to the foreign key constraints referencing it. It must have the right column names and types, and it must have indexes on the referenced keys, as stated earlier. If these are not satisfied, MySQL returns error number 1005 and refers to error 150 in the error message.

 

If MySQL reports an error number 1005 from a CREATE TABLE statement, and the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed. Similarly, if an ALTER TABLE fails and it refers to error 150, that means a foreign key definition would be incorrectly formed for the altered table. To display a detailed explanation of the most recent InnoDB foreign key error in the server, issue SHOW ENGINE INNODB STATUS.

Fonte: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui vao as duas tabelas

 

CREATE TABLE `pat` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Pat_Numb` varchar(10) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

CREATE TABLE `visits` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 ` visit_n` varchar(5) DEFAULT NULL,
 `file` varchar(100) DEFAULT NULL,
 `exam` varchar(85) DEFAULT NULL,
 `Pat_Numb` varchar(10) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

Compartilhar este post


Link para o post
Compartilhar em outros sites

A Foreing Key da tabela "filha" aponta para a Primary Key da tabela "mãe".

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao tenho de fazer algo tipo isto?

 

 

CREATE TABLE `pat` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Pat_Numb` varchar(10) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`Pat_Numb`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

CREATE TABLE `visits` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 ` visit_n` varchar(5) DEFAULT NULL,
 `file` varchar(100) DEFAULT NULL,
 `exam` varchar(85) DEFAULT NULL,
 `Pat_Numb` varchar(10) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
  FOREIGN KEY (Pat_Numb) 
  REFERENCES visits (Pat_Numb) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo,

 

Por que você não relaciona o id da tabela pat com um campo idPat na tabela visits ?

 

Assim:

 

CREATE TABLE `pat` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Pat_Numb` varchar(10) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 $$

CREATE TABLE `visits` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 ` visit_n` varchar(5) DEFAULT NULL,
 `file` varchar(100) DEFAULT NULL,
 `exam` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
  FOREIGN KEY (idPat) 
  REFERENCES pat (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 $$

Porque se tu fizer como disse, o id na tua tabela pat praticamente se tornará inútil pois ele não será mais PK. Tu não pode fazer assim como eu postei? É a forma mais comum, a gente relaciona as tabelas pelos IDs e depois tu pode buscar o campo que quiser.

 

Espero que seja útil, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, vou experimentar.

 

Abraço

 

consegui para uma visita mas para as outras nao consegui...

 


CREATE TABLE `pat` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `idPat` varchar(10) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idPat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

CREATE TABLE `visits` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `visit_n` varchar(5) DEFAULT NULL,
 `file` varchar(100) DEFAULT NULL,
 `exam` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
  FOREIGN KEY (idPat) 
  REFERENCES pat (idPat) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

CREATE TABLE `oct` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `visit_n` varchar(5) DEFAULT NULL,
 `field1` varchar(85) DEFAULT NULL,
 `field2` varchar(85) DEFAULT NULL,
 `field3` varchar(85) DEFAULT NULL,
 `field4` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
  FOREIGN KEY (idPat) 
  REFERENCES pat (idPat) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

CREATE TABLE `mferg` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `visit_n` varchar(5) DEFAULT NULL,
 `field1` varchar(85) DEFAULT NULL,
 `field2` varchar(85) DEFAULT NULL,
 `field3` varchar(85) DEFAULT NULL,
 `field4` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
  FOREIGN KEY (idPat) 
  REFERENCES pat (idPat) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 



Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá algum erro de sintaxe? Eu só tinha copiado o código que tu postou acima e mudei os campos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Diego já questionou sobre a mensagem de erro, há alguma?

 

Cara... Vou passar um pente fino no seu script, mas ó, considere-se um privilegiado, não costumo dar esse tipo de ajuda.

 

Primeiro problema:

CREATE TABLE `pat` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`idPat` varchar(10) DEFAULT NULL,

...

PRIMARY KEY (`idPat`)

Se a coluna idPat esta marcada para ser a chave primária, você não precisa mais da coluna id. Colunas com AUTO_INCREMENT são permitidas apenas em chaves primárias. No script final vou remover a coluna idPat do script e a coluna id será a chave primária.

 

Segundo problema:

CREATE TABLE `mferg` (

...

`idPat` int( 11 ) DEFAULT NULL ,

...

PRIMARY KEY (`id`),

FOREIGN KEY (idPat)

REFERENCES pat (idPat)

Sobre as vírgulas eu já falei. Em todas as tabelas você esta criando a referência para a chave estrangeira corretamente, se você não tivesse cometido o equivoco de colocar tipos diferentes. Na tabela pat idPat é varchar. Para este problema vamos substituir a referência da chave estrangeira por id, pois já alteramos a tabela pat.

 

No final de cada comando, acrescente um ponto-e-vírgula.

 

Segue script completo e correto:

CREATE TABLE `pat` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

CREATE TABLE `visits` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `visit_n` varchar(5) DEFAULT NULL,
 `file` varchar(100) DEFAULT NULL,
 `exam` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (idPat) 
  REFERENCES pat (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

CREATE TABLE `oct` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `visit_n` varchar(5) DEFAULT NULL,
 `field1` varchar(85) DEFAULT NULL,
 `field2` varchar(85) DEFAULT NULL,
 `field3` varchar(85) DEFAULT NULL,
 `field4` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (idPat) 
  REFERENCES pat (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

CREATE TABLE `mferg` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `visit_n` varchar(5) DEFAULT NULL,
 `field1` varchar(85) DEFAULT NULL,
 `field2` varchar(85) DEFAULT NULL,
 `field3` varchar(85) DEFAULT NULL,
 `field4` varchar(85) DEFAULT NULL,
 `idPat` int(11) DEFAULT NULL,
 `data` varchar(11) DEFAULT NULL,
 `up_by` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (idPat) 
  REFERENCES pat (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

 

Paz e bem!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado funcionou bem.

 

diz so uma ultima coisa para fazer mais que uma relação basta replicar os comandos certo

 

CREATE TABLE `oct` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`visit_n` varchar(5) DEFAULT NULL,

`field1` varchar(85) DEFAULT NULL,

`field2` varchar(85) DEFAULT NULL,

`field3` varchar(85) DEFAULT NULL,

`field4` varchar(85) DEFAULT NULL,

`idPat` int(11) DEFAULT NULL,

`data` varchar(11) DEFAULT NULL,

`up_by` varchar(45) DEFAULT NULL,

PRIMARY KEY (`id`),

FOREIGN KEY (idPat)

REFERENCES pat (id) ,

FOREIGN KEY (visit_n)

REFERENCES visits(visit_n)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

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.