用MySQL实现Matlab中的一个奇怪错误

用MySQL实现Matlab中的一个奇怪错误,mysql,database,matlab,Mysql,Database,Matlab,我有两个名为t1和t2的表,其内容列表如下: mysql> use test; Database changed mysql> select * from t1; +----+------+ | id | val | +----+------+ | 1 | 100 | | 2 | 200 | +----+------+ 2 rows in set (0.00 sec) mysql> select * from t2; +----+-------+ | id | va

我有两个名为t1和t2的表,其内容列表如下:

mysql> use test;
Database changed
mysql> select * from t1;
+----+------+
| id | val  |
+----+------+
|  1 |  100 |
|  2 |  200 |
+----+------+
2 rows in set (0.00 sec)

mysql> select * from t2;
+----+-------+
| id | val   |
+----+-------+
| -1 | -1000 |
|  1 |  1000 |
|  3 |  3000 |
+----+-------+
3 rows in set (0.00 sec)
mysql命令中运行的sql语句存在on问题:

mysql> create or replace view iid as select id from t1 union select id from t2;select iid.id,t1.val,t2.val from iid left join t1 on iid.id=t1.id left join t2 on iid.id=t2.id;
Query OK, 0 rows affected (0.07 sec)

+----+------+-------+
| id | val  | val   |
+----+------+-------+
|  1 |  100 |  1000 |
|  2 |  200 |  NULL |
| -1 | NULL | -1000 |
|  3 | NULL |  3000 |
+----+------+-------+
4 rows in set (0.00 sec)
在matlab中运行时出现错误:

>> sqlCmd = ['create or replace view iid as select id from t1 union select id from t2;',...
          'select iid.id,t1.val,t2.val from iid',...
          ' left join t1 on iid.id=t1.id',...
          ' left join t2 on iid.id=t2.id'];

conn = database('test','root','198471',...
        'com.mysql.jdbc.Driver','jdbc:mysql://127.0.0.1:3306/test');
>> curs = exec(conn,sqlCmd);
>> curs.Message
ans =
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select iid.id,t1.val,t2.val from iid left join t1 on iid.id=t1.id left join t2 o' at line 1
>> curs = exec(conn,'select * from t1');
>> curs = fetch(curs);
>> curs.Data
ans =
     1   100
     2   200
>> sqlCmd
我是一个纯粹的SQL新手,我不知道这个错误消息


任何帮助都将不胜感激

似乎Matlab将
sqlCmd
矩阵中的每个字符串视为一个单独的SQL语句。当您将查询分解为字符串部分时,这将不起作用,因为每个部分都是有效的独立SQL语句。如上所述,您可能需要搜索一个允许此操作的设置。或者,您可以尝试将SQL重写为单个字符串,就像您对mysql所做的那样:

 sqlCmd = 'create or replace view iid as select id from t1 union select id from t2;select iid.id,t1.val,t2.val from iid left join t1 on iid.id=t1.id left join t2 on iid.id=t2.id;';
 curs = exec(conn,sqlCmd);

这至少应该运行您的查询而不会出错。如果您还没有这样做,请查看
exec

的mathworks文档。分号分隔了两个单独的SQL语句。在MySQL命令行客户机中,可以在一行上给出多个语句,它们将按顺序执行(作为“批处理”)。我假设您要么需要在MATLAB/JDBC驱动程序中启用批处理语句,要么单独发送每个语句。