3

有两张桌子

TableA
filedata_id | user_id | filename
1           | 1       | file.txt
2           | 1       | file2.txt


TableB   
a_id        | date    | filedataid | counter | state | cat_id | subcat_id | med_id
99          | 1242144 | 1          | 2       | v     | 55     |  56       | 90
100         | 1231232 | 2          | 3       | i     | 44     |  55       | 110

我想将列 cat_id、subcat_id、med_id 移动到 TableA 其中 tableA.filedata_id = TableB.filedataid

编辑:结果应该是 tableA 中的架构更改,因此它如下所示,并且还包含 tableB 中这些列的数据:

TableA
filedata_id | user_id | filename  | cat_id | subcat_id | med_id
1           | 1       | file.txt  | 55     | 56        | 90
2           | 1       | file2.txt | 44     | 55        | 110

等等。

有没有办法轻松做到这一点?

4

3 回答 3

4

您可以INNER JOIN为此使用:

SELECT t1.filedata_id, t1.user_id, t1.filename
      ,t2.cat_id, t2.subcat_id, t2.med_id
FROM TableA t1 
INNER JOIN TableB t2 
ON t1.filedata_id = t2.filedataid

看到这个 SQLFiddle

更新:

您可以像这样更改架构TableA

ALTER TABLE TableA
Add column cat_id int, 
Add column  subcat_id int, 
Add column  med_id int;

TableA并像这样更新from的新列TableB

UPDATE tableA t1 
       JOIN tableB t2 
       ON t1.filedata_id = t2.filedataid
SET t1.cat_id = t2.cat_id,
    t1.subcat_id = t2.subcat_id,
    t1.med_ID = t2.med_ID;

看到这个 SQLFiddle

有关更多信息,请参阅MySQL:ALTER TABLE 语法MySQL:UPDATE 语法

于 2012-09-12T03:36:12.743 回答
2

你可以用INNER JOIN这个,

SELECT  a.*,
        b.cat_id,
        b.subcat_id,
        b.med_ID
FROM    TableA a
        INNER JOIN TableB b
            On a.filedata_id = b.filedataid

SQLFiddle 演示

在您的评论中看到,您需要更改表并在其上添加列,为此您需要执行此 DDL 语句,

ALTER TABLE TableA ADD COLUMN cat_id int;
ALTER TABLE TableA ADD COLUMN subcat_id int;
ALTER TABLE TableA ADD COLUMN med_ID int;

那么您现在可以TableA根据以下值更新您的行TableB

UPDATE tableA t1 INNER JOIN tableB t2 
        ON a.filedata_id = b.filedataid
SET a.cat_id = b.cat_id,
    a.subcat_id = b.subcat_id,
    a.med_ID = b.med_ID

希望这是有道理的。

于 2012-09-12T03:35:09.217 回答
1

在这种情况下,您需要查看多表部分的UPDATE

您还可以执行覆盖多个表的 UPDATE 操作。但是,您不能将 ORDER BY 或 LIMIT 与多表 UPDATE 一起使用。table_references 子句列出了连接中涉及的表。它的语法在第 13.2.8.2 节,“JOIN 语法”中描述。这是一个示例: UPDATE items,month SET items.price=month.price WHERE items.id=month.id;

就像是

UPDATE  TableA, TableB
SET     TableA.cat_id = TableB.cat_id,
        TableA.subcat_id = TableB.subcat_id,
        TableA.med_ID = TableB.med_ID
WHERe   TableA.filedata_id = TableB.filedataid

要更改表(将列添加到 TableA),请查看ALTER TABLE Syntax

于 2012-09-12T03:44:15.397 回答