Ir ao conteúdo

ajuda com select


danimaiochi

Posts recomendados

Postado

bem, é um pouco complicado porque não se tem relacionamento entre as 2 tabelas...

é o seguinte:

temos 2 tabelas, uma com cadastros (e um campo deles é login) e outra que tem outros cadastros (que também tem o campo de login (porém não é vinculado, foi mal feito, não fui eu qm fiz))

então, queria saber quais logins tem na segunda tabela que não tem na primeira

alguem pode me ajudar?

  • 4 semanas depois...
Visitante: pLunky
 
Postado

SELECT DISTINCT tabela2.login

FROM tabela2 (NOLOCK)

WHERE tabela2.login NOT IN (

SELECT DISTINCT tabela1.login

FROM tabela1 (NOLOCK))

ORDER BY tabela2.login

Visitante: pLunky
 
Postado
para que serve esse comando??

eu nunca tinha visto, para qual banco que é?

MS SQL

(NOLOCK) só é realmente necessário quando vários utilizadores acedem ao mesmo banco de dados, para evitar bloqueios de transações.

Vou tentar explicar muuuuito resumidamente...

Existem 2 tipos de "niveis de isolamento" dentro do MS SQL, o Optimista e o Pessimista.

No caso de Optimista, que funciona um pouco como o NOLOCK, todos os utilizadores podem alterar dados ao mesmo tempo, o que pode provocar inconsistencia, ou seja, eu posso estar a alterar um campo em uma tabela, que está ao mesmo tempo a ser alterado por outro utilizador.

No caso Pessimista, o problema é que as ações ficam em "espera" que a anterior termine, ou seja, se uma transação demorar muito tempo, pode provocar block's e deadlock's.

Assim, vamos imaginar que eu estou correndo uma transação muito demorada:

BEGIN TRANSACTION

«O meu código aqui.... demora muitooooo tempo»

COMMIT ou ROLLBACK

Se algum outro utilizador fizer um SELECT à tabela que esteja em uso por mim antes de terminar a minha transação, ele ficará bloqueado até que seja feito o meu COMMIT ou ROLLBACK, o que poderá provocar um deadlock (o SELECT dele gera um erro por demorar tempo demais). No entanto, ele poderá usar o (NOLOCK) para conseguir ter acesso aos dados mesmo antes de eu terminar a transação. É claro que os dados que aparecerão no SELECT dele, poderão estar a ser alvo de alterações pela minha transação, mas por vezes é preferivel ter informação um pouco menos actualizada, do que um DeadLock :P

Resumindo, em casos de bancos de dados utilizados apenas por um utilizador, ou poucos, é dispensável o uso do hint (NOLOCK). :huh:

  • Membro VIP
Postado

Existem 2 tipos de "niveis de isolamento" dentro do MS SQL, o Optimista e o Pessimista.

Tem mais que o nolock e o não-nolock, mas deixa resumido.

No caso de Optimista, que funciona um pouco como o NOLOCK, todos os utilizadores podem alterar dados ao mesmo tempo, o que pode provocar inconsistencia, ou seja, eu posso estar a alterar um campo em uma tabela, que está ao mesmo tempo a ser alterado por outro utilizador.

Que eu me lembre, não existe alteração de dados otimista no MS SQL, apenas leitura.

Resumindo, em casos de bancos de dados utilizados apenas por um utilizador, ou poucos, é dispensável o uso do hint (NOLOCK). :huh:

O uso do NOLOCK tambem deve ser evitado em consultas que precisam trazer dados reais, em alguns casos dados sujos/inconsistentes podem derrubar sua aplicação.

Recomendo que tenha certa cautela ao utilizar o NOLOCK.

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!