- ベストアンサー
MySQLでのEXCEPTについて
テーブルabcに +----+ | ID | +----+ | 001| | 002| | 003| | 004| +----+ テーブルxyzに +----+ | ID | +----+ | 002| | 003| | 005| +----+ のとき、 select * from abc except select * from xyz; として、abcに属し、xyzには属さないIDを出したいのですが、 ERROR 1064 (42000): 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 'selec t * from xyz' at line 3 のエラーが出ます。 何か方法はありますか?
- koton_
- お礼率7% (26/356)
- MySQL
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 あらら・・・MySQL5ですか。副問合わせができる ものはそちらでなさる方がパフォーマンスが あがるでしょうね。 ちなみにJOIN構文は以下のサイトを参照ください。 「LEFT JOIN `hoge` ON 条件」は 「LEFT JOIN `hoge` WHERE 条件 」と同意です。 プログラムにSQLを渡すときにはWHERE句は1度しか 表記できないため前者の方がすっきりとした コードになります。
その他の回答 (3)
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLの質問をする場合は、バージョンを書きましょう。 「EXCEPT」は、MySQLでは未サポートのようです。 差分検索なら、NOT EXISTSがすぐに思い浮かびます。 select * from abc where not exists (select * from xyz where abc.`id`=`id`);
- inui07
- ベストアンサー率0% (0/1)
MySQLでは「except」はサポートされていません。 単純な方法として、表結合し、abc.ID != xyz.id を条件にabcのテーブルからIDを取り出すというのはいかがですか?
お礼
参考になります。
- yambejp
- ベストアンサー率51% (3827/7415)
MySQLはバージョンによって挙動が大きく ことなります。バージョンをハッキリさせた方が 回答がしやすいです。 とりあえず、以下であれば3.23系でも検出できます SELECT `abc`.`ID` AS `ID` , `xyz`.`ID` AS `XID` FROM `abc` LEFT JOIN `xyz` ON `abc`.`ID` = `xyz`.`ID` HAVING ISNULL(`XID`)
補足
バージョンは5.0です。 ご解答のLEFT JOIN `xyz` ON `abc`.`ID` = `xyz`.`ID`の「ON」はどういう意味ですか?
関連するQ&A
- PHP+MySQLで文が正しいのに実行されません
$s_id = "guest"; $s_pw = "guest"; この状態で SELECT * FROM account WHERE id='$s_id', pass='$s_pw' を実行すると 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 ' pass='guest'' at line 1 というエラーが発生します。 idもguestもあるのになぜこのようなエラーが出てしまうのでしょうか?
- ベストアンサー
- MySQL
- MySQLのエラーコード1064の見方
以下のエラーが出ました。 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 '?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash =' at line 1 ) You~nearまではいつもどおりなので分かるのですが、その後が何やらよく分からないので、見方を教えていただけないでしょうか? なお、SQL文は以下の通りです。 select カラム名1 from テーブル名 where カラム名2=$i
- ベストアンサー
- MySQL
- EclipseでMySQLにDELETE文を二つまとめて送れない
環境 WindowsXP Eclipse3.4 MySQL5.1 Server str="DELETE FROM table1 where id=28;DELETE FROM table2 where id=28";という文を実行したのですが 動作しなくて困っています。分かる方がいましたら教えてください。 よろしくお願いします。 st.executeUpdate(str);を利用し、DELETE文ひとつの場合は実行できました。 MySQLServerに直接入力しても実行できました。 しかしEclipseから読み込んで実行すると com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'DELETE FROM table2 where id=28' at line 1 というエラーがでてわかりません。 分かる方がいましたらよろしくお願いします。
- ベストアンサー
- Java
- PHP+MySQL SQL文を外部ファイル化したい。
表題のとおりなのですが… $result = mysql_query( "SELECT * FROM FOO" ); では、動作しています。 このセレクト文を、selectFOO.sql として外部ファイル化し、 (ファイルの中身は、「SELECT * FROM FOO」) $result = mysql_query( selectFOO.sql ); とすると、 1064 : 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 'selectFOO.sql' at line 1 が返ってきます。 SQL文が正しくないよ。マニュアル見てね。 と言われてるのは分かるのですが、 マニュアルのどこを見れば良いのかさえ分かりません。 助けてください。 よろしくお願いします。
- 締切済み
- PHP
- MySQLのエラー
はじめまして。 MySQLでエラーが出てしまい改善するのに困っています。 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... とでます。 「よくわかるPHPの教科書(P202)」という本を見ながらすすめているのですが、 このエラーが言っているのは、 「サーバーのバージョンが本と異なるから、あなたのサーバーにあわせたコマンド入力をしなさい」 ってことなのでしょうか? よろしくお願い致します。
- 締切済み
- MySQL
- mysql で副問い合わせができない (長文)
レンタルサーバー上のmysqlで副問い合わせがうまくできません お手数おかけしますが、何か情報をいただけましたら幸いです 【質問内容】 レンタルサーバー上のmysqlで副問い合わせがうまくできない 【詳細】 ローカルPC上 の mysql で 副問い合わせをするとうまくいくのですが レンタルサーバー上では syntax エラーが出てしまいます ●状況1 たとえば ローカルPC上のmysql で select * from (SELECT * FROM ronbun_art_tbl) AS TBL_B; を実行すると正しく結果を返すのですが レンタルサーバー上だと エラーとなる ●状況2 レンタルサーバー上で SELECT * FROM ronbun_art_tbl は結果をちゃんと返すのですが select * from (SELECT * FROM ronbun_art_tbl) AS TBL_B; をはエラーとなる 【その他の情報】 サーバー ハッスルサーバー mysqlバージョン 4.0.24 ローカルのmysql 4.1 【エラーの内容】 #1064 - 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 * FROM ronbun_art_tbl ) AS TBL_B LIMIT 0, 30' at line 1
- ベストアンサー
- MySQL
- 教えて下さい!ODBCからMySQLへのエクスポートの際のエラー
いつもお世話になっております。 ご教授頂きたいのですが、ACCESSでテーブルを作成して そのテーブルをODBCを使いMySQLへのエクスポートしようと するとエラーが出ます。 解決方法をご教授頂きたいと存じます。 [エラー内容] [MySQL][ODBC 3.51 Driver][mysqld-5.0.21-community-nt]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 '商品名' varchar(50)'at line 1(#1064) 宜しくお願い致します。
- 締切済み
- MySQL
- MySQL 配列もどきを条件式に
MySQL5.5です PostgreSQLからMySQLへ移行作業をしています PostgreSQLの配列型(文字)をMySQLのBLOB型にして格納しています {"ABC", "EFG"}といった形式で格納しているのですが 以下のSQL文をMySQLで使用できる形にしたいのです SELECT * FROM table WHERE Test[1] LIKE '%%' TestがPostgreSQLでの配列になります エラーメッセージは以下の通りです db_query error. 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 '[1] like '%%' 以下のようにAS句で適当な名称を与えて引き出せないかと考えたのですが、「Unknown column 'tst'」となり取得することはできませんでした SELECT *, REPLACE(SUBSTRING(Test, 1, LOCATE(',',Test) - 1), '{', '') AS tst FROM table WHERE tst LIKE '%%'; 何か良い方法などありましたら教えてください、よろしくお願いします
- ベストアンサー
- MySQL
- LEFT OUTER 外部結合で一致しない値も表示
select table1.*, table2.no from table1 inner left outer join table2 on table1.id = table2.no 上記の文を使って、一致した値がなくても、 すべて表示させた表を完成させたいのですが、 エラー #1064 - 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 'left outer join table2 on table1.id = table2.no~ が出てしまいます。 何がいけないのか、LEFT OUTERなしでやってみると、 きちんと値が返ってきました。 詳しい方いらっしゃいましたら、どうかお知恵を貸してください。 お願いいたします。
- ベストアンサー
- MySQL
- eclipseでDB(MySQL)に接続
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 'NULLL' at line 3 eclipseのデータベース開発を行ったところ上記のエラーがでました。 まったっくわからずpcの前でかたっまってます。 どなたかご指導お願いいたします。
- 締切済み
- MySQL
お礼
できました。 ありがとうございます。