Mam następujące tabele:SQL Dołącz z NULL kolumn
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 | +-------+------------------+------+
Kiedy chcę, aby zaznaczyć wszystkie wiersze z b gdzie istnieje odpowiednia oferta/cid-pair w a, I po prostu użyj naturalnego połączenia SELECT b.* FROM b NATURAL JOIN a;
i wszystko jest w porządku.
Gdy a.bid lub a.cid ma wartość NULL, chcę uzyskać każdy wiersz, w którym pasuje inna kolumna, np. jeśli a.bid ma wartość NULL, chcę, aby każdy wiersz gdzie a.cid=b.cid
, jeśli oba są NULL Chcę, aby każda kolumna z b.
Moje naiwne rozwiązanie było to:
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)
Czy istnieje lepszy sposób na to?
b.bid i b.cid nie może być zerowy, więc dodatkowy test jest niepotrzebny, ale podoba mi się drugi przykład bez wyraźnego. – tstenner
@tstenner - Ah. Przegapiłeś, że podałeś, że kolumny w b są niedozwolone. – Thomas