- ベストアンサー
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 のエラーが出ます。 何か方法はありますか?
- みんなの回答 (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」はどういう意味ですか?
お礼
できました。 ありがとうございます。