razs 0 Denunciar post Postado Setembro 17, 2012 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
Prog 183 Denunciar post Postado Setembro 17, 2012 Qual a mensagem de erro? Pat_Numb tem que ser do mesmo tipo e tamanho em todas as tabelas. Compartilhar este post Link para o post Compartilhar em outros sites
razs 0 Denunciar post Postado Setembro 17, 2012 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
Prog 183 Denunciar post Postado Setembro 17, 2012 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
razs 0 Denunciar post Postado Setembro 17, 2012 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
Prog 183 Denunciar post Postado Setembro 17, 2012 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
razs 0 Denunciar post Postado Setembro 17, 2012 sim, o pat_numb esta igual. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 17, 2012 Publica a descrição de visits. Compartilhar este post Link para o post Compartilhar em outros sites
razs 0 Denunciar post Postado Setembro 18, 2012 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
Prog 183 Denunciar post Postado Setembro 18, 2012 Você quer criar uma chave estrangeira entre campos que não são chave? Compartilhar este post Link para o post Compartilhar em outros sites
razs 0 Denunciar post Postado Setembro 18, 2012 estou perdido :s para fazer a relação os dois campos tem de ser chave? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 18, 2012 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
razs 0 Denunciar post Postado Setembro 18, 2012 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
DiegoAngra07 21 Denunciar post Postado Setembro 18, 2012 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
razs 0 Denunciar post Postado Setembro 18, 2012 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
DiegoAngra07 21 Denunciar post Postado Setembro 18, 2012 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
Prog 183 Denunciar post Postado Setembro 18, 2012 Depois de PRIMARY KEY (`id`) deve haver uma vírgula. Compartilhar este post Link para o post Compartilhar em outros sites
razs 0 Denunciar post Postado Setembro 19, 2012 continua na mesma :s cada vez percebo menos disto... Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Setembro 19, 2012 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
razs 0 Denunciar post Postado Setembro 19, 2012 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