数据库查询效率问题

假设,我有以下两张表
image.png

image.png

因为这两张表直接没有关联关系,比如我需要查找姓名是张三,且省份是上海的结果
我目前是这样写的
select * from A表, B表 where A.name = '张三' AND B.省份 = '上海'

问题是这样的语句,如果没有条件,就会出现笛卡尔积的问题(select from A表, B表),这样就会出现42 = 8条数据。
但我还有一个C表,C表跟这两个表格都有关联的如图:
image.png
像这样的情况,大家都是怎样写查询语句的呢?是把一张数据多的作为主表如:
select * from a表 left join c表 on a表.id=c.nid left join b表 on b.id=c.sid where name='张三' and 省份 = '上海'

请大佬指点,或者需要更改表结构的,请直接说明,非常感谢。

阅读 1.1k
1 个回答

C 和 A、B 都是多对一的关系,先关联 A 和 C,以便按 A 的姓名进行筛选。inner join 或者 C left join A 都可以

select a.*, c.sid
from a inner join c on a.id = c.nid
where a.name = '张三'

结果再来关联 B

select x.*, b.省份
from (
  select a.*, c.sid
  from a inner join c on a.id = c.nid
  where a.name = '张三'
) x
inner join b on b.id = x.sid
where b.省份 = '上海'

这两句合并起来,大概应该可以(确实太久没写 SQL,不太清楚了,自己试试吧)

select a.*, b.*
from c
  inner join a on c.nid = a.id
  inner join b on c.sid = b.id
where a.name = '张三' and b.省份 = '上海'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题