在最近做的项目中碰到了数据库方面的问题,对遇到的问题和处理方法做一个小总。
1.左(右)连接查询与多变联合查询的区别。
假定现在有两张表user_info和adviser_verify_info表,用户表中user_id为10000的用户在adviser_verify_info表中可能有对应的记录,也可能没有对应的记录,这是
用左连接查询:
select user_info.`user_id`,user_info.nick_name, `adviser_verify_info`.`description` from
user_info left join `adviser_verify_info` on user_info.user_id = `adviser_verify_info`.user_id where user_info.`user_id` = 10000
可以查出来一条记录。
用联合查询的方式查询:
select user_info.`user_id`,user_info.nick_name, `adviser_verify_info`.`description` from
user_info,`adviser_verify_info` WHERE user_info.`user_id` = 10000 and user_info.user_id = `adviser_verify_info`.user_id
查出来的记录数为0;
两者的目的都是通过用户表的user_id字段去关联表adviser_verify_info查询两张表中与指定的user_id对应的信息,通过比较这两种方式可以发现,当A表中有对应的记录,B表中没有对应的记录时,采用左连接查询可以查出对应的记录来,记录中包含A表中的对应信息,而采用联合查询的方式则查不出对应的记录。
联合查询只要有一张表中没有关联条件对应的记录,则无法查出记录;而连接查询则可以在其中某张表缺失关联条件对应记录的情况下查询出记录。
2.一般插入一张表中的记录数是固定的,但之前碰到了一种情况,插入某张表中的记录是不固定的,插入的记录值是从另外一张表中根据查询条件查询出来的结果:
要在user_commission_count表中插入若干条记录,这些记录的用户为在另外一张表user_commission中在满足创建按时间在某个时间段内的用户,记录数需要以来查询才能知道,这种情况下可以采用下面的写法: values采用查询的方式。
INSERT INTO user_commission_count (user_id,exchange_type,COUNT,STATUS,create_time,update_time)
SELECT distinct(user_id),'P',0,0,NOW(),NOW() FROM user_commission
WHERE create_time BETWEEN '2018-04-01' AND '2018-04-30'