2011-03-18 12 views
1

私は3つのテーブルを持っています多対多の関係を最初に2つのタグ、ソフトウェアとSoftware_Tag。分割されたサブクエリと仮想テーブル

(私はMySQLでのいずれかでで行うことができないので)私は2つの部分にサブクエリを分割したい:

ここ

(SELECT softwares_id FROM Software_Tag GROUP BY softwares_id HAVING COUNT(*) >=2) as my

DELETE FROM Software_Tag WHERE tags_id=1 AND softwares_id IN (my)

私はそれを置くために「私」という名前の仮想テーブルを使用してみてください2番目のクエリ。 どうすればいいですか?

のようにenの例外が発生しました。を確認してください。

-

答えて

1

DELETE FROM Software_Tag WHERE tags_id=1 AND softwares_id IN 
(SELECT softwares_id FROM Software_Tag GROUP BY softwares_id HAVING COUNT(*) >=2) 

これは、MySQLで動作するはずです。チェックMySQLサーバのバージョン -

編集.. TEMPORARRY表... BLA-BLA NEARこの

DELETE ST1 
FROM Software_Tag ST1 
JOIN (SELECT softwares_id FROM Software_Tag GROUP BY softwares_id HAVING COUNT(*) >=2) ST2 on ST1.softwares_id=ST2.softwares_id 
where ST1.tags_id=1 
+0

http://dev.mysql.com/doc/refman /5.0/en/delete.html 現在、テーブルから削除したり、サブクエリ内の同じテーブルから選択することはできません。 – ses

+0

これを試してください。うまくいけば私は好奇心が強いです。 –

+0

はい。 thxs。私はまだperditionsではないので、software_id = softwares_idを修正してください。 – ses

1

一時テーブルを使用するには、あなたはこのようにそれを実行する必要があります。あなたは同じようにそれを行うことができ

DROP TABLE IF EXISTS my_tmp; 
CREATE TEMPORARY TABLE my_tmp SELECT softwares_id 
    FROM Software_Tag GROUP BY softwares_id 
    HAVING COUNT(*) >=2; 
DELETE FROM Software_Tag 
    WHERE tags_id=1 
     AND softwares_id IN (SELECT softwares_id FROM my_tmp); 
+0

構文エラーを試してみてください。私はubuntu 10.10リポジトリから5.xを使用しています。最後の1つ私は推測する。 – ses

+0

私はそれが 'TEMPORARRY'ではなく' TEMPORARRY'だと思います – laurent

+0

サブクエリは 'softwares_id'の代わりに' software_id'を使っていたと思います: '(SELECT softwares_id FROM my_tmp)' – laurent

関連する問題