我有以下表格:
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 | +-------+------------------+------+
当我想从b中选择a中相应的bid / cid-pair的所有行时,我只使用自然连接SELECT b.* FROM b NATURAL JOIN a;一切都很好.
当a.bid或a.cid为NULL时,我想获得另一列匹配的每一行,例如如果a.bid是NULL,我想要a.cid = b.cid的每一行,如果两者都是NULL我想要b中的每一列.
我天真的解决方案是这样的:
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 )
有没有更好的方法来做到这一点?
解决方法
不,这就是它.
(我通常将ISNULL(a.bind)改为a.bind IS NULL,用于ANSI sql合规性FWIW.)
原文地址:https://www.jb51.cc/mssql/74707.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。