Mysql - Obter todos os registros onde há um valor igual em um campo e, por sua vez tem um valor não nulo em outros campos

Sylar:

Talvez o que eu estou tentando explicar é um pouco complicado, eu explico:

Eu tenho uma tabela com um campo imei, id_factura, id_albaran, transaccion, estado (entre outros).

Um imei pode ter um transacion(Compra ou venta) e estado(nuevo ou USADO).

Na minha consulta eu só quero isso para os 'nuevo', na tabela, existem centenas de registros com imei mas só pode haver o mesmo imei, estado = 'nuevo', transaccion = 'venta' com id_factura não nulo e / ou id_albaran não nulo.

O objectivo desta consulta é descobrir se o mesmo imei, transacion = venta, estado = nuevo, tem um registro id_factura não nulo e outro recorde id_albaran não nulo, então eu quero que ele retorne um campo se ele tem dois registros com um valor de 1 ou se ele só tem um registro que retornar 0.

Dou-lhe um exemplo do que eu quiser que a consulta de retorno, no meu caso eu só quero o que é marcado com vermelho (venda).

digite descrição da imagem aqui

Eu tentei isso (mas é errado):

SELECT imei
FROM ventacompra
WHERE transacion = 'venta' AND estado='nuevo' AND id_albaran IS NOT NULL
AND imei IN (SELECT imei FROM ventacompra v WHERE transacion = 'venta' AND estado='nuevo' AND id_factura IS NOT NULL)

____EDIT PARA EXAMPLE____

transacion     estado   imei   id_factura   id_albaran  has_factu_alba
venta          nuevo    0001        01         NULL       1
venta          nuevo    0001      NULL         01         1
compra         nuevo    0002       01          NULL       0
passarão:

com EXISTS:

SELECT v.* FROM ventacompra v
WHERE v.transacion = 'venta' AND v.estado='nuevo' AND (v.id_factura IS NULL XOR v.id_albaran IS NULL)
AND EXISTS (
  SELECT 1 FROM ventacompra
  WHERE  imei = v.imei AND transacion = v.transacion AND estado = v.estado
    AND (id_factura IS NULL) = (v.id_factura IS NOT NULL)
    AND (id_albaran IS NULL) = (v.id_albaran IS NOT NULL)
)

Se uma das colunas id_facturae id_albarané sempre nullea outra not null, então você pode omitir a condição:

AND (v.id_factura IS NULL XOR v.id_albaran IS NULL)

Veja a demonstração .
Resultados:

| id_ventacompra | transacion | estado | imei            | id_factura | id_albaran |
| -------------- | ---------- | ------ | --------------- | ---------- | ---------- |
| 492            | venta      | nuevo  | 352984109069491 |            | 23         |
| 493            | venta      | nuevo  | 352984109069491 | 10         |            |

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=402848&siteId=1
Recomendado
Clasificación