Sylar:
たぶん私が説明しようとしていることはビットが畳み込まれている、私が説明します。
私は(特に)IMEIフィールド、id_factura、id_albaran、transaccion、エスタードを持つテーブルがあります。
IMEIを有することができるtransacion
(compraまたはVENTA)を、そしてestado
(ヌエボ又はusado)。
私のクエリでは、私は唯一、「ヌエボ」もののためにそれをしたいテーブル内のレコードの数百人がIMEIであるだけ同じIMEIがあることができ、エスタード=「ヌエボ」、id_facturaとtransaccion =「ベンタ」はNULLまたは/およびNOT NULLをid_albaran。
私はそれがAを持つ2つのレコードを持っている場合、それはフィールドを返すようにしたいので、このクエリの目的は、同じIMEI、transacion =ベンタ、エスタード=ヌエボは、id_facturaレコードではないヌルと別のid_albaran記録NOT NULLを持っているかどうかを確認することです1の値か、それは1つのレコードだけを持っている場合は0を返します。
私は、私の場合、私は赤のみ(販売)が付いているものをしたい、あなたに私は、クエリが返すようにしたいものの例を与えます。
私はこれを試してみました(しかし、間違っている)しています。
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 FOR 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
離れて渡します:
と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)
)
列のいずれかがid_factura
とid_albaran
常にありnull
、その他not null
、あなたは条件を省略することがあります。
AND (v.id_factura IS NULL XOR v.id_albaran IS NULL)
参照のデモを。
結果:
| id_ventacompra | transacion | estado | imei | id_factura | id_albaran |
| -------------- | ---------- | ------ | --------------- | ---------- | ---------- |
| 492 | venta | nuevo | 352984109069491 | | 23 |
| 493 | venta | nuevo | 352984109069491 | 10 | |