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

您不能从此 SELECT 中执行此操作,因为它包含 UNION;您必须单独为每个表执行 DELETE。

顺便说一句,您的四个表应该是一个表。包括一个包含 DOC、WBOK、CAD 或 OTHER 的 CATEGORY 字段;这样您就可以区分您的四个数据集。这样做会大大简化你的整体逻辑。

于 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 中的东西,你必须一个一个地做,因为你一次只能一个表中删除。

所有表的数据结构都相同。Robert Harvey 建议您创建一个带有名为“CATEGORY”的附加列的单个表,该列对数据曾经所在的表进行编码。这通常是一个好主意,它会使您的删除更容易

于 2012-08-15T17:26:53.360 回答