0

こんにちは皆さん、ネストされた選択をどのように作成したかについてのコードがここにあります。今私の問題は、ネストされた選択でいくつかのファイルを削除したいのですが、方法がわかりません..

SELECT title, 
       filename, 
       jono, 
       client, 
       dt, 
       remarks 
FROM   ((SELECT doc_title    AS title, 
                doc_filename AS filename, 
                doc_jono     AS jono, 
                doc_client   AS client, 
                doc_date     AS dt, 
                remarks 
         FROM   tbl_doc) 
        UNION 
        (SELECT wbok_title    AS title, 
                wbok_filename AS filename, 
                wbok_jono     AS jono, 
                wbok_client   AS client, 
                wbok_date     AS dt, 
                wbok_remarks  AS remarks 
         FROM   tbl_wbok) 
        UNION 
        (SELECT cad_title    AS title, 
                cad_filename AS filename, 
                cad_jono     AS jono, 
                cad_client   AS client, 
                cad_date     AS dt, 
                cad_remarks  AS remarks 
         FROM   tbl_cad) 
        UNION 
        (SELECT oth_title    AS title, 
                oth_filename AS filename, 
                oth_jono     AS jono, 
                oth_client   AS client, 
                oth_date     AS dt, 
                oth_remarks  AS remarks 
         FROM   tbl_oth)) AS t1 
ORDER  BY title 
4

2 に答える 2

0

UNION が含まれているため、この SELECT からは実行できません。テーブルごとに個別に DELETE を実行する必要があります。

余談ですが、4 つのテーブルは 1 つのテーブルにする必要があります。DOC、WBOK、CAD、または OTHER を含む CATEGORY フィールドを含めます。4 つのデータセットを区別できるようにします。これを行うと、全体的なロジックが大幅に簡素化されます。

于 2012-08-15T17:26:42.793 に答える
0

これの一般的な形は

DELETE FROM table tbl
    WHERE tbl.id = (SELECT id FROM [ your query here] )

テーブルがあれば

CREATE TABLE Foo (bar integer PRIMARY KEY)

次に、これは

DELETE FROM table tbl
    WHERE tbl.id = (SELECT id FROM table ... JOIN ..  WHERE X=y etc.. )

あなたの場合、UNION 内のものを削除したい場合は、一度に1 つのテーブルからしか削除できないため、それらを 1 つずつ実行する必要があります。

データ構造はすべてのテーブルで同じです。Robert Harvey は、データがどのテーブルにあったかをエンコードする「CATEGORY」という追加の列を持つ単一のテーブルを作成することを提案しています。これは一般的に良い考えであり、削除がはるかに簡単になります。

于 2012-08-15T17:26:53.360 に答える