Tópico webservers, fóruns, SQL, PHP, ASP, etc

qual a dificuldade de por mais 2 inserts?


Porque depois a chave primária da tabela1 vai ser forasteira de outra tabela, que por sua vez é forasteira de outra.
Cada vez que fizesse um insert, teria que por dezenas de atributos, pensei que ouvesse uma maneira mais simples de o fazer...
 
qual a dificuldade de por mais 2 inserts?

Porque depois a chave primária da tabela1 vai ser forasteira de outra tabela, que por sua vez é forasteira de outra.
Cada vez que fizesse um insert, teria que por dezenas de atributos, pensei que ouvesse uma maneira mais simples de o fazer...

é pá, as coisas não acontecem por obra e graça do divino espírito santo [:D][:D]

mete lá mais dois inserts no procedimento não sejas preguiçoso
 
Lourenco, sugiro vivamente que utilizes IDENTITY nas tuas chaves primárias. Não tens que definir manualmente os ID's e manipulas isso de uma forma eficiente.

Declaras assim:

CREATE TABLE ccc(
id int identity(1,1) primary key not null,
campo1 varchar(255),
campo2 varchar(255)
)




No teu stored procedure,

declare sp_teste
@campo1 varchar(255),
@campo2 carchar(255)

as

begin

declare @id1 as int

insert into ccc values (@campo1, @campo2)

@id1 = (SELECT @@IDENTITY)

...



Acho que é algo do género. Torna-se mais dinâmico, mais intuitivo e a meu ver mais eficiente. Experimenta que não te vais arrepender. Qualquer coisa dispõe

end
 
Chave "forasteira" é muito bom [:D][:D] ... também aprendi esse termo na faculdade. Quando vim para Lisboa tive que mudar a nomenclatura pois ninguém percebia [:D][:D]
 
é pá, as coisas não acontecem por obra e graça do divino espírito santo [:D][:D]

mete lá mais dois inserts no procedimento não sejas preguiçoso

llool, o problema nao é ser preguiçoso, o problema e que isto sao mais de 10 tableas encadeadas, ou seja, se quisesse fazer algum insert tinha que por os inserts de todas as tabelas e os atributos de todos pois tao todas ligadas xD

nogueira_ribeiro, o identity substitui aqueles passos todos do ix_max certo?
e nao existe nenhuma maneira mais simples para colocar esse id na tabela 2 do tipo :

id_tabela1 id tabela3
1 3

sem ter que estar a fazer os inserts de todos no mesmo procedimento?

obrigado pela ajuda pessoal
 
Chave "forasteira" é muito bom [:D][:D] ... também aprendi esse termo na faculdade. Quando vim para Lisboa tive que mudar a nomenclatura pois ninguém percebia [:D][:D]

No ano seguinte a eu ter feito uma cadeira que envolve base de dados o Professor mudou, e introduziu esse termo, quando colegas meus meus vieram pedir ajuda e chegaram ao pé de mim com esse termo, lembro-me de ter feito uma "cara feia" e "WTF?". [:D]
 
llool, o problema nao é ser preguiçoso, o problema e que isto sao mais de 10 tableas encadeadas, ou seja, se quisesse fazer algum insert tinha que por os inserts de todas as tabelas e os atributos de todos pois tao todas ligadas xD

nogueira_ribeiro, o identity substitui aqueles passos todos do ix_max certo?
e nao existe nenhuma maneira mais simples para colocar esse id na tabela 2 do tipo :

id_tabela1 id tabela3
1 3

sem ter que estar a fazer os inserts de todos no mesmo procedimento?

obrigado pela ajuda pessoal

que eu saiba nao, como ja foi dito, nao há grandes hipoteses de magia!
 
llool, o problema nao é ser preguiçoso, o problema e que isto sao mais de 10 tableas encadeadas, ou seja, se quisesse fazer algum insert tinha que por os inserts de todas as tabelas e os atributos de todos pois tao todas ligadas xD

nogueira_ribeiro, o identity substitui aqueles passos todos do ix_max certo?
e nao existe nenhuma maneira mais simples para colocar esse id na tabela 2 do tipo :

id_tabela1 id tabela3
1 3

sem ter que estar a fazer os inserts de todos no mesmo procedimento?

obrigado pela ajuda pessoal

Utiliza Triggers para fazeres isso É mais eficaz e resolve-te o problema.

Não tenho aqui nenhum exemplo, mas procura por trigger sql no google que encontras facilmente.

Basicamente o que vais fazer é dizer à tabela que quando for efectuada, ou estiver a ocorrer, uma operação de insert, deve inserir o valor que pretendes noutra tabela.

Utiliza o trigger com a opção after insert.

Espero ter-te apontado na direcção correcta.
 
Necessito de criar a seguinte consulta:
O resultado final deve ter este aspecto:

C1 C2 C3 C4
A 1 3 5
A 2 2 1
A 3 4 4
A 4 9 7
A 5 1
B 1 2
B 2 4 10
B 3 12 5
B 4 11 4
B 5 5 9


A tabela de origem (Tabela1) tem as seguintes colunas:

C1 C2 C3 C4
A 1 5 3
A 2 3 2
A 3 2 4
A 4 2 3
B 1 3 3


O que a consulta faz(deveria) era agrupar pela coluna C1 e pela C2 da tabela1 e contar as C3 e C4. Os valores das C3 e C4 variam de 1 a 5. O que está(deveria) na C2 da consulta é o agrupamento de cada um desses valores.
 
Não entendo como chegas à tabela 1...

Explica a 1ª linha, a ver se chego lá.
A tabela1 é uma tabela existente. O que quero é agrupar pela C1, pela C2 e contar a C3 e a C4. Os valores da C3 e C4 variam de 1 a 5. por isso é que na C2 da consulta quero os valores de 1 a 5 para cada grupo de C1.
 
Tu queres qq coisa do género:

SELECT C1, C2, count(C3), count(C4) FROM tabela1
GROUP BY C1, C2

Não sei se será bem isto, porque não sei se entendi bem a questão...
 
Tu queres qq coisa do género:

SELECT C1, C2, count(C3), count(C4) FROM tabela1
GROUP BY C1, C2

Não sei se será bem isto, porque não sei se entendi bem a questão...
Não porque a C2 da consulta tem que ter os valores de 1 a 5 "fictícios" e na tabela 1 estes valores podem ir até 20 ou mais.
 
De facto, a questão está um pouco confusa.
Primeiro, queres contar as colunas C3 e C4? mas contar o quê? o n.º de uma determinada ocorrência? Não será antes a soma de todos os valores?

Para te aparecerem sempre as 5 linhas (de 1 a 5) para cada C1, tens duas soluções: ou fazes 5 SELECTs com a clausula WHERE (=1,=2...) unidos com UNION, ou então usas uma tabela auxiliar (com valores 1,2,3,4,5) e fazes um outer join com a tabela1.
 
Desculpa, mas não estrou a perceber :sh)
A tabela1, nas colunas C3 e C4 só tem valores de 1 a 5.
O que eu quero é agrupar pela coluna C1 e "criar" um subagrupamento pelos possíveis valores de C3 e C4 (1 a 5). Algo do género:

A
1 Nº de "uns" Nº de "uns"
2 Nº de "dois" Nº de "dois"
3 ..... ....
4
5
B
1 Nº de "uns" Nº de "uns"
2 Nº de "dois" Nº de "dois"
3 ..... ....
4
5

Tenho de ter 4 colunas.
Nota: 1,2,3,4,5 é a 2ª coluna. O fórum é que me alinha tudo à esquerda...
 
Última edição:
De facto, a questão está um pouco confusa.
Primeiro, queres contar as colunas C3 e C4? mas contar o quê? o n.º de uma determinada ocorrência? Não será antes a soma de todos os valores?

Para te aparecerem sempre as 5 linhas (de 1 a 5) para cada C1, tens duas soluções: ou fazes 5 SELECTs com a clausula WHERE (=1,=2...) unidos com UNION, ou então usas uma tabela auxiliar (com valores 1,2,3,4,5) e fazes um outer join com a tabela1.
Isso já tentei, mas no caso de uma coluna não ter um dos valores, na outra também não aparece, mesmo com os joins.
 
Voltar
Superior