MYSQL多表联合查询 (4表)
SELECTA.ID,A.NUMBER,A.PRICE,A.ORDER_TIME,B.USER_ID,B.STARTIME,B.STOPTIME,C.CHANNEL_PAY,D.COMPANYFROMD表DLEFTJOINA表AONA.COMPANY_ID=D.UIDLEFTJOINB表BONB.COMPANY_ID=D.UIDLEFTJOINC表CONC.COMPANY_ID=D.UID有条件的再加行:WHERE..........排序(如A表的ID由大到小排)
:ORDERBYA.IDDESC
如何在库内实现跨库联合查询
在库内实现跨库联合查询可以通过使用MySQL的Federated存储引擎来实现。
Federated存储引擎是一种特殊的存储引擎,它允许在一个MySQL服务器上,通过对另一个MySQL服务器上的表进行远程查询来访问另一个MySQL数据库中的数据。这种方式不需要在本地创建表,而是直接在远程数据库中进行操作,从而实现了跨库联合查询。
使用Federated存储引擎需要进行以下步骤:
1. 安装Federated存储引擎
Federated存储引擎默认是未安装的,需要通过编译MySQL源代码时指定--with-federated-storage-engine选项来进行安装。
2. 创建Federated表
在本地数据库中创建一个Federated表,这个表与远程数据库中的表相似,但是表类型为Federated,并且需要指定远程MySQL服务器的连接信息和远程表名称。例如,创建一个Federated表,连接远程数据库test,其中的表名称为employee:
CREATE TABLE employee_fed (
emp_no INT(11) NOT NULL,
first_name VARCHAR(14),
last_name VARCHAR(16),
hire_date DATE NOT NULL,
gender ENUM('M','F') NOT NULL,
birth_date DATE NOT NULL,
PRIMARY KEY (emp_no)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='mysql://remoteuser:remotepassword@remoteserver:3306/test/employee';
3. 查询Federated表
在本地数据库中查询Federated表即可实现对远程数据库中数据的访问,例如:
SELECT * FROM employee_fed WHERE gender='F' ORDER BY hire_date;
需要注意的是,使用Federated存储引擎进行跨库联合查询会有一定的性能损失,因为需要通过网络连接远程数据库,所以建议在必要时使用。