重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、where型子查询
创新互联专注于南华企业网站建设,响应式网站建设,电子商务商城网站建设。南华网站建设公司,为南华等地区提供建站服务。全流程按需定制,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
(把内层查询结果当作外层查询的比较条件)
#不用order by 来查询最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
#取出每个栏目下最新的产品(goods_id唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);
2、from型子查询
(把内层的查询结果供外层再次查询)
#用子查询查出挂科两门及以上的同学的平均成绩
思路:
#先查出哪些同学挂科两门以上
select name,count(*) as gk from stu where score 60 having gk =2;
#以上查询结果,我们只要名字就可以了,所以再取一次名字
select name from (select name,count(*) as gk from stu having gk =2) as t;
#找出这些同学了,那么再计算他们的平均分
select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk =2) as t) group by name;
3、exists型子查询
(把外层查询结果拿到内层,看内层的查询是否成立)
#查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);
当然是不能直接跨服务器查询了。但是,如果你有足够的权限,可以变通一下。就是MYSQL的同步复制
使s2作为s1的从服务器,同步数据库d1到s2,这样s1做了更改后s2上也会有d1且d1也会随之改变数据,再在s2上执行同台服务器上的跨库查询就方便多了
关于如何设置“MYSQL的复制”,请到网站下载MYSQL参考手册,里边有详细的说明
如果不明白,可以HI我
如果A、B库在同一个mysql实例下(同一执行程序下)可以用A.search,B.room去访问:
update A.search s join B.room r on s.room_id=r.room_id
set s.is_online=r.is_online;
不过你这room如果只有几条,直接把is_online对应room_id的值写在sql里去更新A.search表不就好了
update A.search set is_online=(case when room_id=x1 then y1 when room_id=x2
then y2 when room_id=x3 then y3 ...... else yn end)
如果不使用数据库中间件的话,这样的逻辑一般是放在业务层面来通过代码来合并数据。
你的问题问得好奇怪,只给出了MySQL数据库,为什么要跨数据库查询,用Java里面的JDBC可以连接不同的数据源,就可以跨数据库了啊。
1、需要当前用户对两个库具备相应的访问和操作权限
2、通过数据库名.表名的方式进行join
SELECT
*
FROM
db1.t1 a
INNER JOIN db2.t2 b ON a.id = b.id
WHERE
a.Id = 1;
3、建议改为es方式进行数据处理,想学java欢迎关注。