Mysql 如何實現多張無關聯表查詢資料並分頁

2022-09-24 10:18:09 字數 4085 閱讀 6530

在三張沒有主外來鍵關聯的表中取出自己想要的資料,並且分頁。

水果表:

堅果表:

飲料表:

資料庫隨便建的,重在方法。

union all 操作符用於合併兩個或多個 select 語句的結果集。

請注意,union all內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同 ; 另外,union all結果集中的列名總是等於 union all中第乙個 select 語句中的列名。

// 詳細sql語句

select * from

( (select fid,fname,price,type from fruits)

union all

(select nid,name,price,6 as type from nut)

union all

(select did,dname,price,7 as type from drinks)

) as fnd limit 0,10 -----fnd為表的別名

部門表:tbl_dept

員工表:tbl_emp

資料庫sql檔案

create database /*!32312 if not exists*/`ssm-crud` /*!40100 default character set utf8 */;

use `ssm-crud`;

/*table structure for table `tbl_dept` */

drop table if exists `tbl_dept`;

create table `tbl_dept` (

`dept_id` int(11) not null auto_increment,

`dept_name` varchar(255) default null,

primary key (`dept_id`)

) engine=innodb auto_increment=8 default charset=utf8;

/*data for the table `tbl_dept` */

insert into `tbl_dept`(`dept_id`,`dept_name`) values

(1,'技術部'),

(2,'業務部'),

(6,'銷售部'),

(7,'人事部');

/*table structure for table `tbl_emp` */

drop table if exists `tbl_emp`;

create table `tbl_emp` (

`emp_id` int(11) not null auto_increment,

`emp_name` varchar(255) default null,

`emp_gender` char(1) default null,

`emp_email` varchar(255) default null,

`d_id` int(11) default null,

primary key (`emp_id`),

key `fk_tbl_emp` (`d_id`),

constraint `fk_tbl_emp` foreign key (`d_id`) references `tbl_dept` (`dept_id`)

) engine=innodb auto_increment=14 default charset=utf8;

/*data for the table `tbl_emp` */

insert into `tbl_emp`(`emp_id`,`emp_name`,`emp_gender`,`emp_email`,`d_id`) values

(1,'xiaoshen','2',null,6),

(4,'曉明','1',null,1),

(5,'xiaohong','2',null,2),

(6,'xiaohei','2',null,6),

(7,'xiaozhang','1',null,1),

(8,'xiaogao','',null,1),

(9,'xiaohua','1',null,1),

(10,'xiaoyan','2',null,1),

(11,'xiaohai','2'

(12,'xiaoqiang','1',null,6),

(13,'xiaoqi','2',null,7);

分頁錯誤寫法(主查詢員工表)

select * from tbl_emp e

left join

tbl_dept d

on d.dept_id = e.d_id

limit 1,10

使用子查詢方式解決問題

select

*from

(select

*from

tbl_emp e

left join

tbl_dept d

on d.dept_id = e.d_id

mxaeohp

group by e.d_id

limit 1,10

) eleft join tbl_dept d

mxaeohp on d.dept_id = e.d_id

下面**與之無關 僅為備份

select

ft.id,

ft.partner_id as partnerid,

ft.code ,

ft.end_update_date as endupdatedate,

ft.name ,

ft.type ,

ft.area ,

ft.is_default as isdefault,

fp.id fpid,

fp.shop_id as fpshopid ,

fp.provice_id as fpproviceid ,

fp.provice_name as fpprovicename ,

fp.start_num as fpstartnum ,

fp.start_fee as fpstartfee ,

fp.increase_num as fpincreasenum ,

fp.increase_fee as fpincreasefee ,

fp.code as fpcode ,

fp.provice_text as fpprovicetext ,

fp.template_id as fptemplateid

from

(select

f.id,

f.partner_id ,

f.code ,

f.end_update_date ,

f.name ,

f.type ,

f.area ,

f.is_default ,

f.is_del,

f.create_date

from

bus_freight_template f

left join bus_freight_provice p

on f.id = p.template_id

where f.code = p.code

and f.code = #[code]

group by f.id

limit #,#

) ft

left join bus_freight_provice fp

on ft.id = fp.template_id

where ft.code = fp.code

and fp.template_id is not null

and ft.code = #[code]

and fp.is_del = '0'

and ft.is_del = '0'

order by ft.create_date desc

本文標題: mysql 如何實現多張無關聯表查詢資料並分頁

本文位址: /shujuku/mysql/399070.html

MySQL多張表關聯查詢

工作中遇到的問題,其實也不算難,最多算是複雜了一丟丟。有四張表,a,b,c,d 假設 a 商戶表,有欄位code b 商戶普通使用者表,也有字段code ps code是關聯著三張表的重要字段 c 商戶會員表,沒有與其關聯的code,但是有card code欄位與d表中的card code關聯 d ...

mysql如何關聯 MySQL 如何執行關聯查詢

當前mysql執行的策略很簡單 mysql對任何關聯都執行巢狀迴圈操作,即mysql先在乙個表中迴圈取出單條資料,然後再巢狀迴圈到下乙個表中尋打匹配的行,依次下去,直到描述到所表表中匹配的行為止。然後根據各個表匹配的行,返回查詢中需要的各個列。mysql會嘗試在最後乙個關聯表中打到所有匹配的行,如果...

mysql如何關聯 MySQL如何執行關聯查詢

mysql中 關聯 join 一詞包含的意義比一般意義上理解的要更廣泛。總的來說,mysql認為任何乙個查詢都是一次 關聯 並不僅僅是乙個查詢需要到兩個表的匹配才叫關聯,索引在mysql中,每乙個查詢,每乙個片段 包括子查詢,設定基於表單的select 都可能是關聯。所以,理解mysql如何執行關聯...