解决办法是修改max_heap_table_size参数,改大以足够容纳表的大小,比如512M。
在my.cnf中增加:
max_heap_table_size=512M
重启MySql即可。
btw,如果是MyISAM引擎出现'Table' is full异常,那么就是数据库文件超过文件大小系统,比如fat32,低版本的Linux,文件最大不可以大于2G,这需要转换fat32为NTFS,或升级Linux版本。
Oracle 、DB2、SQL Server、PostgreSQL 支持 Full JOIN
但是 MySQL 是不支持的。
可以通过
LEFT JOIN + UNION + RIGHT JOIN 的方式 来实现。
下面是 测试表与测试数据
-- 学生表CREATE TABLE student (
SNO INT,
SNAME VARCHAR(10),
ICNO INT
)
-- 食堂IC卡表
CREATE TABLE IC (
ICNO INT,
ICNAME VARCHAR(10),
ICMoney INT
)
INSERT INTO student VALUES(1, '张三', 1 )
INSERT INTO student VALUES(2, '李四', 2 )
INSERT INTO student VALUES(3, '王五', NULL)
INSERT INTO IC VALUES(1, '张三', 500 )
INSERT INTO IC VALUES(2, '李四', 250 )
INSERT INTO IC VALUES(3, '赵老师', 600)
下面是 SQL Server 使用 full join 的结果
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
FULL JOIN IC
ON (student.ICNO = IC.ICNO)
go
SNO SNAME ICNAME ICMoney
----------- ---------- ---------- -----------
1 张三 张三 500
2 李四 李四 250
3 王五 NULL NULL
NULL NULL 赵老师 600
(4 行受影响)
下面是 MySQL 不支持 的输出结果:
mysql> SELECT-> student.SNO,
-> student.SNAME,
-> IC.ICNAME,
-> IC.ICMoney
-> FROM
-> student
-> FULL JOIN IC
-> ON (student.ICNO = IC.ICNO)
ERROR 1054 (42S22): Unknown column 'student.SNO' in 'field list'
下面是 MySQL 的 LEFT JOIN + UNION + RIGHT JOIN 的方式。
mysql> SELECT-> student.SNO,
-> student.SNAME,
-> IC.ICNAME,
-> IC.ICMoney
-> FROM
-> student
-> LEFT JOIN IC
-> ON (student.ICNO = IC.ICNO)
-> UNION
-> SELECT
-> student.SNO,
-> student.SNAME,
-> IC.ICNAME,
-> IC.ICMoney
-> FROM
-> student
-> RIGHT JOIN IC
-> ON (student.ICNO = IC.ICNO)
+------+-------+--------+---------+
| SNO | SNAME | ICNAME | ICMoney |
+------+-------+--------+---------+
| 1 | 张三 | 张三 | 500 |
| 2 | 李四 | 李四 | 250 |
| 3 | 王五 | NULL | NULL |
| NULL | NULL | 赵老师 | 600 |
+------+-------+--------+---------+
4 rows in set (0.01 sec)
mysql不支持full join,完全连接。支持左连(left join),右连(right join)和内连(inner join)要想达到full join的作用,必须使用left join + union(不能是union all)+right join
SELECT * FROM
(
SELECT * FROM select_in a LEFT JOIN select_out b ON a.MaterialID = b.MaterialID WHERE a.a_date>='2016-06-25 23:59:22' AND a.a_date<NOW()
UNION
SELECT * FROM select_in a RIGHT JOIN select_out b ON a.MaterialID = b.MaterialID WHERE b.a_date>='2016-06-25 23:59:22' AND b.a_date<NOW()
) t
你的思路没问题,语法有点问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)