Jump to content
Analinee3

ERROR: syntax error at or near "PRIMARY"

Recommended Posts

Fiz o mapeamento da atividade e   Fiz o código, mas notei q da erro  bem próximo as chaves. Sou iniciante, não tenho noção do erro , como o q é ou que pode ser.agradeço a ajuda!

 

CREATE TABLE CLIENTE(
cod_cliente INTEGER NOT NULL,
nome_cliente VARCHAR(30) NOT NULL,
num_pedido  INTEGER,
PRIMARY KEY(COD_CLIENTE)
);

 CREATE TABLE TELEFONE (
 cod_cliente  INTEGER NOT NULL,
 telefone_fixo  VARCHAR (10),
 telefone_celular  VARCHAR (10),

 FOREIGN KEY ( COD_CLIENTE)
  REFERENCES  CLIENTE  (COD_CLIENTE)
 PRIMARY KEY ( COD_CLIENTE)
   REFERENCES CLIENTE (COD_CLIENTE)

  ); 

  CREATE TABLE EMAIL_CLIENTE (
   cod_cliente     INTEGER NOT NULL,
  email_cliente,  VARCHAR (30),
   email2_cliente VARCHAR (30),

   FOREIGN KEY ( COD_CLIENTE)
  REFERENCES  CLIENTE  ( COD_CLIENTE)
 PRIMARY KEY ( COD_CLIENTE)
   REFERENCES CLIENTE (COD_CLIENTE)
   );

   CREATE TABLE VENDA (
   num_pedido      INTEGER,
   dt_pedido     TIMESTAMP,
   cod_pedido   INTEGER,

   PRIMARY KEY (NUM_PEDIDO) 
   FOREIGN KEY (COD_PRODUTO)
     REFERENCES  PRODUTO (COD_PRODUTO);
   
  CREATE TABLE VENDA_CONTEM(
num_pedido        INTEGER,
cod_produto        INTEGER,
pco_produto      NUMERIC (6,0),
qtd              NUMERIC (6,0),

PRIMARY KEY (NUM_PEDIDO)
REFERENCES  VENDA( NUM_PEDIDO)
FOREIGN KEY ( COD_PRODUTO)
 REFERENCES  PRODUTO ( COD_PRODUTO)
 );

 CREATE TABLE PRODUTO (
 cod_produto      INTEGER,
 nom_produto      VARCHAR (30) NOT NULL,
 est_produto     NUMERIC (6,0),
 pco_produto    NUMERIC (6,0),
 fabricante       VARCHAR (30),

 FOREIGN KEY (NUM_PEDIDO)
  REFERENCES  COMPRA ( NUM_PEDIDO)
  PRIMARY KEY (COD_PRODUTO)
 );


 CREATE TABLE COMPRA (
 num_pedido     INTEGER,
 dta_pedido     TIMESTAMP,
  FOREIGN KEY (NUM_PEDIDO)
  REFERENCES  VENDA (NUM_PEDIDO)
  PRIMARY KEY (NUM_PEDIDO)
   REFERNCES VENDA(NUM_PEDIDO)
   );

   CREATE TABLE FORNECEDOR (
   cod_fornecedor         INTEGER,
   nom_fornecedor     VARCHAR (30) NOTT NULL,
   rua_local             VARCHAR (30),
   numero_local      VARCHAR (30),

   PRIMARY KEY ( COD_FORNECEDOR)
   );

CREATE TABLE TELEFONE_FORNECEDOR(
cod_fornecedor   INTEGER,
telefone1   VARCHAR (10),
telefone2      VARCHAR (10),

FOREIGN KEY ( COD_FORNECEDOR)
  REFERENCES FORNECEDOR ( COD_FORNECEDOR)
PRIMARY  KEY ( COD_FORNECEDOR)
    REFERENCES  FORNECEDOR ( COD_FORNECEDOR)
    
  );

  CREATE TABLE EMAIL_FORNECEDOR (
cod_fornecedor    INTEGER,
email1_fornecedor  VARCHAR (30),
email2_fornecedor   VARCHAR (30),

FOREIGN KEY (COD_FORNECEDOR)
  REFERENCES FORNECEDOR ( COD_FORNECEDOR)
 PRIMARY  KEY ( COD_FORNECEDOR)
    REFERENCES  FORNECEDOR ( COD_FORNECEDOR)

    );

Screenshot_2019-05-04-12-09-41.png

Share this post


Link to post
Share on other sites

Acho que tem uma vírgula entre as definições da PK e FK.

Share this post


Link to post
Share on other sites

Segue o exemplo de uma fonte confiável.

 

Rode um "create" por vez.

Share this post


Link to post
Share on other sites

1. nao existe "primary key... references".
2. algumas colunas estão sendo definidas como primary e foreign key ao mesmo tempo, ex: tabelas telefone e email_cliente. verifique isso, pq uma chave primaria tem que ser unica e nao nula, portanto o cliente será obrigado a ter um telefone e um email e apenas um...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By TheRonaldoStar
      Olá, Venho aqui de novo para tirar uma dúvida que creio eu ser muito simples porem não sei como aplicar!;
      Como diz no título do post eu gostaria de fazer um select de cadastros cujo o id do usuário online está nesta coluna,
      Porem neste campo contem 2 id separados por uma ' , '. Sendo assim não dar para mim fazer uma pesquisa com com a tag WHERE id ='Valor'
      Em fim eu quero ajuda para selecionar todos os cadastro cujo o id do usuário online está por EX: Sou o usuário 1 existe dois cadastros que tem meu id: [1, 2] e [2, 1];
      Alem de pesquisar todos os cadastros que tenha meu id nesta coluna eu quero que não tenha interferência ou listar cadastro do usuário 1 se eu for o usuário 21 por ex.
       
      Qual quer ajuda é bem vinda!
      Atenciosamente,
      ~Ronaldo
    • By TheRonaldoStar
      Oii, fala ae pessoal!!
      Alguém pode me ajudar com uma coisa por favor?;
      Seguinte!, eu anteriormente fiz uma pergunta aqui no fórum recorrente a isso, mas eu conseguir uma solução parcial.
      Que era, fazer uma listagem de todos os cadastros e fazer a junção dos cadastros com uma coluna igual, Ou seja existem duas colunas [DE e Para], que recebem o id de quem está recebendo ou que está enviando a mensagem, eu conseguir fazer a tal listagem por grupo mas o problema que estou tendo é: que so faz o agrupamento de as colunas contiver o id por ex: [De = "1" e Para ="2"].
      Atualmente estou usando a codificação deste Jeito:
       
      $sql_2 = $db -> prepare("SELECT * FROM privado WHERE (Para = '$Meu_id') Or (De = '$Meu_id') GROUP BY Para, De DESC"); $sql_2 -> execute(); Esta consulta como pode ver ele busca todos os cadastros que tenha o meu ID ou seja do usuário online!, Após a consulta ele vei obter em um "while" somente o [ Id_De eo Id_Para ] desta forma:
      while($dados_2 = $sql_2 -> fetch(PDO::FETCH_OBJ)){ $Id_De = ($dados_2 -> De); $Id_Para = ($dados_2 -> Para); } Mas em fim eu gostaria de saber como mostrar somente um resultado ou seja o ultimo resultado que tiver o meu ID em ambas colunas [ Id_De ou Id_Para ].
      Antes de vocês me recomendar a função DESC LIMIT 'valor' saiba eu quero que liste todos os usuários que enviou ou recebeu minha mensagem não somente 1 ou seja se eu mandar um mensagem para o usuário 2 e ele me retornar uma mensagem vai mostrar somente o ultimo registro que tenha o meu ID e o id dele.
       
      Atenciosamente,
      ~Ronaldo
       
    • By Aureo Almeida
      Eu possuo em uma página em que existe um menu, com categorias inseridas a partir de um banco de dados, e na mesma página uma listagem de produtos.
      A função deste menu é enviar para a clausula where do SQL que lista os produtos parâmetros que permitam filtro dos produtos. Faço isso com a variável $_GET, da seguinte forma:
      $sub_id = $_GET['sct_id']; Isso funciona certinho, porém o problema é que quando a página é carregada, a não ser que seja feita uma opção no menu para selecionar os produtos, a listagem deles volta vazia e com o seguinte erro:
      array(0) { } Notice: Undefined index: sct_id in D:\XAMPP\htdocs\projeto\arq\cosm.php on line 76 Tentei desenvolver as seguinte condições que mudassem o SQL,  mas não consegui fazer dar certo:
      if(empty($sub_id = array(0))) $sql = "SELECT * FROM psd_produtos WHERE ctg_id = 1"; else { $sql = "SELECT * FROM psd_produtos WHERE ctg_id = 1 AND sct_id = '$sub_id'"; } Como fazer com que o SQL que orienta a consulta quando a página for carregada seja um, e quando passo parâmetro via GET seja outro?
    • By thunanchiu@hotmail,com
      Bom dia, gostaria dessa ajuda.
      Tenho uma tabela de "INSCRIÇÃO" onde a mesma possui 2 chaves estrangeiras (CAND_SQ e CANDPL_SQ). Ambas as chaves estrangeiras possuem um campo CPF.
      Gostaria de saber como eu trago os cpfs que são iguais dentro da inscrição.
      Ou seja, atualmente tenho uma INSCRIÇÃO onde pode ser feita de duas maneiras diferentes. Inscrição Regular e Inscrição Atraso. Quando eu for fazer a Inscrição Atraso, caso eu já tenha feito a Inscrição Regular não poderei fazer a Inscrição Atraso.
    • By TaisStream
      Como configurar essa query com inner join, no arquivo .xml?
      Me ajudem pf eu comecei mas estou perdida,  pesquisei já vi algo de /root... mas minha query esta diferente, nao sei se falta algo
       
       
      QUERY ATUAL:
      set mapreduce.job.queuename=low_relatorios; 
      set mapreduce.job.max.split.locations=100;
      SELECT a.num_msisdn,
             a.max_date
      FROM fact.dw_f_rcrg_gems_rate_subsc t
      INNER JOIN
        (SELECT num_msisdn,
                MAX(dat_operacao) AS max_date
         FROM fact.dw_f_rcrg_gems_rate_subsc
         WHERE (ref_date)>=$startdate
           AND ref_date<=$finaldate
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
      AND a.max_date = t.dat_operacao
      WHERE ref_date>=$startdate
      AND ref_date<=$finaldate;
       
      QUERY CONFIGURANDO NO XML: 
       
          <value><![CDATA[[
      INSERT
              overwrite TABLE fact.dw_f_rcrg_gems_rate_subsc t 
              (
                      a.num_msisdn,
                      a.max_date
              )
      (SELECT
          INNER JOIN
      SELECT      
              MAX(dat_operacao) AS max_date;
      FROM fact.dw_f_rcrg_gems_rate_subsc) a
         WHERE (ref_date)>='$startdate'
           AND ref_date<=$'finaldate'
           AND ide_plano_tarifario_atual IN (48,
                                             50,
                                             51,
                                             52,
                                             53,
                                             59,
                                             61,
                                             62,
                                             63,
                                             67,
                                             73,
                                             74)
         GROUP BY num_msisdn)a ON a.num_msisdn = t.num_msisdn
                  AND a.max_date = t.dat_operacao
      WHERE ref_date>='$startdate'
      AND ref_date<=$finaldate;]]>
      </value>
       
       
      Poderiam me ajudar por favor, sou estagiario na area e ainda estou aprendendo.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.