Rudolfo Posted November 9, 2009 at 07:49 PM Report Share #295312 Posted November 9, 2009 at 07:49 PM boas, comecei ha cerca de duas semanas a mexer em SQL lá na faculdade ... e até vou entendendo algo dakilo!!! agora,tou aki com uma duvida, relativa a um problema proposto pela professora .... TABELAS: Fornecedor = Cod_F + nome_F + morada_F Artigo = cod_A + nome_A + cor_A Catálogo = cod_F + cod_A + preço_A O catálogo lista os preços dos artigos por fornecedor. o que é pretendido é: Listar os nomes dos fornecedores que fornecem só artigos vermelhos. eu através deste comando: select f.nome from fornecedor f,artigo a, catalogo c group by a.cor_A like 'vermelho' where c.cod_F = f.cod_f and c.cod_a =a.cod_a consigo fazer o que é pedido??? cumps. Link to comment Share on other sites More sharing options...
bruno1234 Posted November 9, 2009 at 08:14 PM Report Share #295317 Posted November 9, 2009 at 08:14 PM Se tens a query porque é n a testas tu? Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
Rudolfo Posted November 9, 2009 at 09:49 PM Author Report Share #295339 Posted November 9, 2009 at 09:49 PM Se tens a query porque é n a testas tu? nao testo, pois nao tenho "valores", e ainda nao "aprendi" o input dos mesmos ... Link to comment Share on other sites More sharing options...
miro3 Posted November 9, 2009 at 10:15 PM Report Share #295341 Posted November 9, 2009 at 10:15 PM o teu query está mal a)onde tens "group by" deves ter "where" b)o Group by não pode vir antes da condição where. c)se usas o Like é porque queres procurar registos similares a, então deves ter %. Se sabes exactamente o que procuras, usa o = Query corrigido. Select Distinct f.nome From fornecedor f,artigo a, catalogo c (Nolock) Where a.cor_A='vermelho' And c.cod_F = f.cod_f And c.cod_a =a.cod Order By 1 para introduzires dados nas tabelas usas o «insert into» Insert Into Fornecedor Select '1' cod_f, 'Nome' nome_f, 'morada' morada_f Link to comment Share on other sites More sharing options...
Baderous Posted November 9, 2009 at 10:20 PM Report Share #295342 Posted November 9, 2009 at 10:20 PM Essa query não mostra os fornecedores que só fornecem artigos vermelhos. Link to comment Share on other sites More sharing options...
Rudolfo Posted November 9, 2009 at 11:26 PM Author Report Share #295359 Posted November 9, 2009 at 11:26 PM o teu query está mal a)onde tens "group by" deves ter "where" b)o Group by não pode vir antes da condição where. c)se usas o Like é porque queres procurar registos similares a, então deves ter %. Se sabes exactamente o que procuras, usa o = Query corrigido. Select Distinct f.nome From fornecedor f,artigo a, catalogo c (Nolock) Where a.cor_A='vermelho' And c.cod_F = f.cod_f And c.cod_a =a.cod Order By 1 para introduzires dados nas tabelas usas o «insert into» Insert Into Fornecedor Select '1' cod_f, 'Nome' nome_f, 'morada' morada_f miro3, neste exercicio nao nos é possivel inserir dados, devido as permissoes!!! mas, btw, ja entendi a cena do " group by" ... 😉 tks!!! so nao entendo na tua qery, a cena do " order by 1 " ... Link to comment Share on other sites More sharing options...
bruno1234 Posted November 9, 2009 at 11:37 PM Report Share #295361 Posted November 9, 2009 at 11:37 PM O Order by 1 é a ordenação pela coluna 1, ou seja nomes. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
AMateus Posted November 10, 2009 at 01:40 PM Report Share #295403 Posted November 10, 2009 at 01:40 PM Na realidade o mais correcto seria (assumindo que podes usar INNER JOIN): select F.nome_F from Fornecedores F inner join Catálogo C on F.Cod_F = C.cod_F inner join Artigo A on C.cod_A = A.cod_A where A.cor_A = 'Vermelho' (é provável q haja erros de sintaxe pois foi escrito aqui directamente (long live intellisense) 😉 R. Tape Loading Error Link to comment Share on other sites More sharing options...
miro3 Posted November 10, 2009 at 01:46 PM Report Share #295405 Posted November 10, 2009 at 01:46 PM é indiferente usar «From a,b (nolock) where a.cod=b.cod» ou usar o «Inner join». Link to comment Share on other sites More sharing options...
Rudolfo Posted November 10, 2009 at 07:45 PM Author Report Share #295481 Posted November 10, 2009 at 07:45 PM Na realidade o mais correcto seria (assumindo que podes usar INNER JOIN): select F.nome_F from Fornecedores F inner join Catálogo C on F.Cod_F = C.cod_F inner join Artigo A on C.cod_A = A.cod_A where A.cor_A = 'Vermelho' (é provável q haja erros de sintaxe pois foi escrito aqui directamente (long live intellisense) 😉 sim, posso usar o " INNER JOIN " ... mas olha, esta resoluçao, mostra mesmo SO os que vendem VERMELHO??? Link to comment Share on other sites More sharing options...
bruno1234 Posted November 10, 2009 at 07:56 PM Report Share #295484 Posted November 10, 2009 at 07:56 PM No enunciado tens: os que vendem só vermelho Se tiveres fornecedores q vendem vermelho e azul, vão aparecer nessa query, apesar do filtro remover os azuis. Tens q acrescentar o filtro para remover as outras cores. Sugestão: encaixar no filtro where not exists cor != vermelho. (Isto n é para espetar directo, é só para ficar a ideia) Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
paulo silva Posted November 11, 2009 at 10:32 AM Report Share #295550 Posted November 11, 2009 at 10:32 AM Isso não tem nada que saber, é um inner join para juntar as tabelas certo? Depois um Where onde a cor é igual a vermelho, nada mais amigos... :smoke: Link to comment Share on other sites More sharing options...
AMateus Posted November 11, 2009 at 11:17 AM Report Share #295555 Posted November 11, 2009 at 11:17 AM é indiferente usar «From a,b (nolock) where a.cod=b.cod» ou usar o «Inner join». Certo, mas já que o SQL Server é uma BD relacional.... 🙂 E o Código fica significativamente mais limpo e fácil de actualizar (ie, acrescentar mais relações) Além de que o JOIN é um standard Ansi-92, enquanto o WHERE (como ligação) não o é. De qualquer maneira é, na maior parte dos casos, uma questão de gosto pessoal! Na maioria dos projectos não há, de facto, diferença. Mas em projectos grandes nada melhor que analisar o Execution Plan do query analyser e ver se há diferença a nível de rapidez ou outro (algo que deve ser feito N vezes sobre as queries até ter a certeza de que não existe bottlenecks). A discussão vêm de longe lol 😄 R. Tape Loading Error Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now