有两个表
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
等等。
有没有办法轻松完成这项工作?
答案 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;
答案 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
在评论中看到,你需要改变表并在其上添加列,为此你需要执行这个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