合并两个mysql表的一些列,其中id = fileid

时间:2012-09-12 03:32:59

标签: mysql sql

有两个表

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

等等。

有没有办法轻松完成这项工作?

3 个答案:

答案 0 :(得分: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

<击> See this SQLFiddle

<强>更新

您可以像这样更改TableA的架构:

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

并从TableA更新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;

See this SQLFiddle

有关详情,请参阅MySQL: ALTER TABLE SyntaxMySQL: UPDATE Syntax

答案 1 :(得分: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 Demo

在评论中看到,你需要改变表并在其上添加列,为此你需要执行这个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

希望这是有道理的。

答案 2 :(得分:1)

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

  

您还可以执行覆盖多个表的UPDATE操作。   但是,您不能将ORDER BY或LIMIT与多表一起使用   UPDATE。 table_references子句列出了涉及的表   加入。其语法在第13.2.8.2节“JOIN语法”中描述。这里   是一个例子:UPDATE项目,月份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