estoy teniendo las siguientes tablas:SQL-Unir con NULL columnas
Table a +-------+------------------+------+-----+ | Field | Type | Null | Key | +-------+------------------+------+-----+ | bid | int(10) unsigned | YES | | | cid | int(10) unsigned | YES | | +-------+------------------+------+-----+
Table b +-------+------------------+------+ | Field | Type | Null | +-------+------------------+------+ | bid | int(10) unsigned | NO | | cid | int(10) unsigned | NO | | data | int(10) unsigned | NO | +-------+------------------+------+
Cuando quiero para seleccionar todas las filas de B donde hay una oferta/cid-par correspondiente en una, me simplemente use una combinación natural SELECT b.* FROM b NATURAL JOIN a;
y todo estará bien.
Cuando a.bid o a.cid es NULL, quiero obtener cada fila donde coincida la otra columna, p. si a.bid es NULL, quiero que cada fila sea a.cid=b.cid
, si ambas son NULL. Quiero que cada columna sea de b.
Mi solución ingenua era la siguiente:
SELECT DISTINCT b.* FROM b JOIN a ON (ISNULL(a.bid) OR a.bid=b.bid) AND (ISNULL(a.cid) OR a.cid=b.cid)
¿Hay alguna manera mejor que esto?
b.bid y b.cid no puede ser nulo, entonces la prueba adicional es innecesaria, pero me gusta el segundo ejemplo sin distinción. – tstenner
@tstenner - Ah. Perdió que usted declaró las columnas en b como no nulos. – Thomas