有两个表table_A, table_B:
pro:
id | pro_name | creator_id | create_time |
---|---|---|---|
1 | pro1 | 101 | 2017-5-1 |
2 | pro2 | 103 | 2017-3-1 |
3 | pro3 | 103 | 2017-2-3 |
4 | pro6 | 116 | 2017-6-3 |
pro_users:
id | pro_id | user_id |
---|---|---|
1 | pro4 | 123 |
2 | pro1 | 132 |
3 | pro6 | 103 |
描述:
表pro为用户创建项目的信息表,表pro_users为与项目相关联的项目-用户表。
需求:
需要查询表A中某一创建者(例如:creator=103)创建的项目信息,以及和此用户相关联的项目信息,并分页实现。
MySQL实现:
SELECT * FROM (
SELECT * FROM pro WHERE id IN(
SELECT id FROM pro WHERE creator=103
UNION
SELECT pro_id FROM pro_users WHERE user_id=103
)
) tbl
LIMIT 100,10;
查询结果:
id | pro_name | creator_id | create_time |
---|---|---|---|
2 | pro2 | 103 | 2017-3-1 |
3 | pro3 | 103 | 2017-2-3 |
4 | pro6 | 116 | 2017-6-3 |
联合查询容易出的错误:
ERROER:The used SELECT statements have a different number of columns
原因:
union 是联合查询的意思,故要求查询结构有着相同的结构,比如select a,b from TA union select 1,2,3,4,5 from Tb 肯定报错!就算TA 与TB结构相同 但注意这里只取Ta的查询结果a,b 也就是列结构只有2个 而后面的Tb取的结构有5个自然报错。