sql可以连接多少表?

先说结论,mysql最大支持61表连接

使用sql进行测试。

已知表:

CREATE TABLE `uexam` (
  `ueno` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
  `eno` bigint(20) DEFAULT NULL COMMENT '考试编号',
  `uno` bigint(20) DEFAULT NULL COMMENT '用户编号',
  `exe` int(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT '参与考试{0.未参加,1.已参加,2.已交卷}',
  PRIMARY KEY (`ueno`)
) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8mb4;

使用Java循环拼接sql测试:

    public static void main(String[] args){

        String sql = "select ";
        int tables = 64;  // 条数
        String sql_name = "t0.*";
        String sql_table = " uexam t0";
        for (int i = 1; i < tables; i++) {
            sql_name += ",t"+i+".*";
            sql_table += " LEFT JOIN uexam t"+i+" ON "+"t"+(i-1)+".ueno=t"+i+".ueno";
        }

        sql += sql_name;
        sql += " from";
        sql += sql_table;

//        System.out.println(sql);
        List<Map<String, Object>> maps = ViewJDBC.queryMapList(sql);
        System.out.println(maps);
    }

通过tables控制数量,测试最大支持量为61,上面64会报以下错误:

java.sql.SQLException: Too many tables; MySQL can only use 61 tables in a join

多表连接时,不一定要用 = 号,也可以是 != ,或者 > ,< 与其他符号。某个表中数据不存在时则部分行的部分列返回空,可以放心把表设计为范式并使用 join 连接,可以去掉数据冗余。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注