加入收藏 | 设为首页 | 会员中心 | 我要投稿 鄂州站长网 (https://www.0711zz.com/)- 数据分析、网络、云渲染、应用安全、大数据!
当前位置: 首页 > 数据库 > MsSql > 正文

SQL-Join with NULL-columns

发布时间:2021-02-20 20:31:17 所属栏目:MsSql 来源:互联网
导读:我有以下表格: Table a+-------+------------------+------+-----+| Field | Type | Null | Key |+-------+------------------+------+-----+| bid | int(10) unsigned | YES | || cid | int(10

我有以下表格:

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.)

(编辑:鄂州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读