• ベストアンサー

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 のエラーが出ます。 何か方法はありますか?

  • MySQL
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

#1です。 あらら・・・MySQL5ですか。副問合わせができる ものはそちらでなさる方がパフォーマンスが あがるでしょうね。 ちなみにJOIN構文は以下のサイトを参照ください。 「LEFT JOIN `hoge` ON 条件」は 「LEFT JOIN `hoge` WHERE 条件 」と同意です。 プログラムにSQLを渡すときにはWHERE句は1度しか 表記できないため前者の方がすっきりとした コードになります。

参考URL:
http://www.mysql.gr.jp/Manual/mysql-3.23.49/manual.ja_Reference.html#JOIN

その他の回答 (3)

回答No.3

MySQLの質問をする場合は、バージョンを書きましょう。 「EXCEPT」は、MySQLでは未サポートのようです。 差分検索なら、NOT EXISTSがすぐに思い浮かびます。 select * from abc where not exists (select * from xyz where abc.`id`=`id`);

koton_
質問者

お礼

できました。 ありがとうございます。

  • inui07
  • ベストアンサー率0% (0/1)
回答No.2

MySQLでは「except」はサポートされていません。 単純な方法として、表結合し、abc.ID != xyz.id を条件にabcのテーブルからIDを取り出すというのはいかがですか?

koton_
質問者

お礼

参考になります。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

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

koton_
質問者

補足

バージョンは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で副問い合わせがうまくできない 【詳細】 ローカル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 配列もどきを条件式に

    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の前でかたっまってます。 どなたかご指導お願いいたします。