1

t1 と t2 という名前の 2 つのテーブルがあり、その内容は次のとおりです。

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 ステートメントがあります。

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 のまったくの初心者で、このエラー メッセージの意味がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

2

Matlab は、sqlCmdマトリックス内の各文字列を個別の SQL ステートメントとして扱っているようです。クエリを文字列部分に分割しているため、すべての部分が有効なスタンドアロン SQL ステートメントであるとは限らないため、これは機能しません。上記のコメントが示唆するように、これを可能にする設定を検索する必要がある場合があります。または、mysql で行ったのと同じように、SQL を単一の文字列に書き直すこともできます。

 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);

これにより、少なくともエラーなしでクエリが実行されるはずです。まだ行っていない場合は、 http://www.mathworks.co.uk/help/toolbox/database/ug/exec.htmlの mathworks ドキュメントを参照してください。exec

于 2012-08-25T09:58:15.577 に答える