consulta utilizando "not in" na DAL

25 views
Skip to first unread message

Fernando Vieira

unread,
Jun 27, 2014, 9:41:01 AM6/27/14
to web2py-us...@googlegroups.com
Pessoal estou com uma nova dúvida em uma consulta utilizando a DAL

É o seguinte preciso de uma consulta que me retorne campos de uma tabela que não estejam cadastrados também em outra tabela

em sql usando NOT IN, eu tenho a solução, como abaixo

select usuario from fisico_sip_iax where tecnologia = 'SIP' and usuario not in(select ramal_fisico from f_ramal_virtual) ;

alguém sabe como fazer está, utilizando a DAL



 

Ari Sobel

unread,
Jun 27, 2014, 9:55:23 AM6/27/14
to web2py googlegroups
ola, existe o "belongs" - que corresponde ao IN -

para fazer not in... o jeito burro seria fazer uma lista de todos os que nao pertencem e usar o belongs..
Se alguem souber o "jeito inteligente"... gostaria de aprender tb

Ver iso no BOOK:



--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo quot;web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Maxwell Morais

unread,
Jun 27, 2014, 10:04:32 AM6/27/14
to web2py-us...@googlegroups.com

​E​
m alguns casos utiliza-se ~ antes da função para negação, não sei se se aplica ao belongs

--

Best Regards.

Maxwell Morais
Python Developer powered by Webnotes framework <3

Ari Sobel

unread,
Jun 27, 2014, 10:24:33 AM6/27/14
to web2py googlegroups
No book, Maxwell, mostra que esse belongs é uma propriedade (entendo), da DAL, acho que nao dá pra usar o operador "~"

>>> for row in db(db.log.severity.belongs((1, 2))).select():
        print row.event
Mas veja esse exemplo tb, que dá pra usar o belongs emcima de um set ROWS - a idéia seria que esse set NAO contivesse o que nao desejo


>>> bad_days = db(db.log.severity==3)._select(db.log.event_time)
>>> for row in db(db.log.event_time.belongs(bad_days)).select():
        print row.event

trocar o bad_days pof good_days  - alterando para

good_days = db(db.log.severity<>3)._select(db.log.event_time)

Maxwell Morais

unread,
Jun 27, 2014, 10:33:43 AM6/27/14
to web2py-us...@googlegroups.com

Eu acabei de testar aqui e veja o resultado!

print(db(~db.mx_cliente.id.belongs((1,2)))._select(db.mx_cliente.ALL))

"""SELECT  mx_cliente.id, mx_cliente.mx_loja, mx_cliente.nome, mx_cliente.cpf_cnpj, mx_cliente.rg_ie, mx_cliente.nascimento, mx_cliente.email, mx_cliente.tel1, mx_cliente.tel2, mx_cliente.tel3, mx_cliente.cep, mx_cliente.endereco, mx_cliente.numero, mx_cliente.complemento, mx_cliente.bairro, mx_cliente.cidade, mx_cliente.estado, mx_cliente.is_active, mx_cliente.created_on, mx_cliente.created_by, mx_cliente.modified_on, mx_cliente.modified_by FROM mx_cliente WHERE (NOT (mx_cliente.id IN (1,2)));"""

Ari Sobel

unread,
Jun 27, 2014, 11:02:46 AM6/27/14
to web2py googlegroups
Legal!

vlew - achcho que ta resolvido então  

Fernando, tenta reproduzir isso (colocar o ~ antes da query)
330.gif

Fernando Vieira

unread,
Jun 27, 2014, 11:07:33 AM6/27/14
to web2py-us...@googlegroups.com
Isso mesmo pessoal, usando "belongs" e atribuindo a negação com o "~" funcionou perfeitamente

assim:
ramal_virtual = db(db.f_ramal_virtual)._select(db.f_ramal_virtual.ramal_fisico)
db(~db.fisico_sip_iax.usuario.belongs(ramal_virtual)).select(orderby=db.fisico_sip_iax.usuario) 

=]






Ari Sobel

unread,
Jun 27, 2014, 11:11:03 AM6/27/14
to web2py-us...@googlegroups.com
Muito obrigado pelo feedback!

Enviada do meu iPhone

Fernando Vieira

unread,
Jun 27, 2014, 11:17:35 AM6/27/14
to web2py-us...@googlegroups.com
Eu que agradeço, Vlw Ari e Maxwell
Reply all
Reply to author
Forward
0 new messages