两个表关联 通过2个字段关联, 如果a表一个字段为null b表也有一个字段为null 关联后可以查询到吗?
在数据库中,使用 NULL 进行关联时,通常不会得到预期的结果,因为 NULL 不能直接与其他值进行比较,包括另一个 NULL 值。也就是说,NULL = NULL 在 SQL 中是不成立的。
不过,如果你需要通过两个字段的 NULL 进行关联,可以使用 IS NULL 或 COALESCE 等方式进行特殊处理。
例如,如果你想通过 a 表的 field1 和 b 表的 field2 进行关联,并且考虑到 NULL 值的情况,你可以使用类似下面的 SQL 查询:
SELECT *
FROM a
LEFT JOIN b a.node=b.node
ON (a.name = b.name OR (a.name IS NULL AND b.name IS NULL))
这个查询的逻辑是:
当 a.field1 和 b.field2 相等时进行关联。
如果 a.field1 和 b.field2 都是 NULL,也视为匹配进行关联。
这样你就可以在查询中包括 NULL 字段的匹配了。
需要注意的是,具体的查询写法可能依赖于你使用的数据库类型(例如 MySQL、PostgreSQL、SQL Server 等),但基本思路是一致的。
关联查询为什么一般建议 小表驱动大表
on a.字段=b.字段 and b.字段=‘123‘ 注意 and后只写b表字段的过滤条件
AND过滤的使用场景
a left join b on a.id=b.id AND b.date=今天 这样可以查询 a表有 b表缩小了范围后的一对多的数据.
关联查询时 on 条件过滤和where条件过滤的区别
-- 将过滤条件放在on后面,是在联合查询之前,先对右表进行查询过滤(只对右表条件过滤有效, 左表无效),将查询过滤的结果作为临时表,再和左表进行联合查询;左表结果是全量的
-- mysql中left join on后面and 和where条件查询的差异
-- 说下原因:
(1):ON后面的筛选条件主要是针对的是关联表【而对于主表筛选条件不适用】。
(2):对于主表的筛选条件应放在where后面,不应该放在ON后面
(3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件放置于ON后。如果是想再连接完毕后才筛选就应把条件放置于where后面
(4):对于关联表我们其实可以先做子查询再做join (这样就不用 on后接 and条件了)
Mysql中Bigint与Java数据类型对应关系
Mysql主键有符号的bigint自增 对应java的Long类型
用navicat建表, 主键用bigint, 无需勾选, 就是有符号的
MySQL中,有符号类型 Bigint(20)的取值范围为-9223372036854775808~9223372036854775807,与Java.lang.Long的取值范围完全一致,mybatis/mybatis-plus会将 Bigint(20)映射为Long类型。
MySQL中有符号int类型最大可以支持到约22亿,这个范围远远超过了我们实际项目中的需求和MySQL单表所能支持的性能上限。对于OLTP应用来说,单表的数据规模一般控制在千万级别,单表数据量不会达到亿的级别(Mysql单表性能问题要考虑在内)。
Mysql中无符号int类型,上限为42亿,预留量非常充足。