0

我有两个结构相同的表。Table1保存经过审核的数据,table2保存其余数据。

表格1

+--------+--------+---------------+--------+-------- ---+
| “身份证” | “名字” | “说明” | “类型” | “国家” |
+--------+--------+---------------+--------+-------- ---+
| "5" | “一个” | "x" | "1" | “美国” |
| "6" | "b" | "x" | "1" | “英国” |
+--------+--------+---------------+--------+-------- ---+

表 2

+------+------------+------------+------+ --------+------------+----------+
| “身份证” | 组织ID | “名字” | “说明” | “类型” | “国家” | “状态” |
+------+------------+------------+------+ --------+------------+----------+
| "1" | "5" | “标题1” | “说明1” | "1" | “美国” | "2" |
| "2" | "6" | “标题2” | 《说明2》 | "1" | “英国” | "2" |
| "3" | "6" | “标题2” | 《说明2》 | "1" | “英国” | "2" |
+------+------------+------------+------+ --------+------------+----------+

我运行下面的 sql 以table 1使用来自 的数据进行更新table 2,它运行良好。它们实际上是用户为不同标题和描述建议的编辑。所以可能有不止一个具有相同的orgId

UPDATE table1 a
INNER JOIN table2 b
ON a.id = b.id
SET a.name = b.name,
a.description = b.description
WHERE a.id=1; // Problem lies here

我的问题是,我只得到table2'sid和在我的脚本中,type然后country我将其传递给包含上述 sql 的函数。

现在,我应该在WHERE那里的子句中指定哪个表?应该是a ~ table1还是b ~ table2。现在它a,但我没有a.id在我的查询字符串中得到值,我不能使用orgId,因为那里不止一个。此外,在查询字符串中获取它需要更多的代码和对几件事的更改。

如果我用会好吗

 UPDATE table1 a
    INNER JOIN table2 b
    ON a.id = b.id
    SET a.name = b.name,
    a.description = b.description
    WHERE b.id=3; // Can I specify id from b here

我试过这个并且它有效,但这是正确的做法吗?

4

2 回答 2

1

是的,使用任一表中的 id 都是安全的,因为它们用于连接。您甚至可以使用来自 table2 的相同 id,如下所示:

 UPDATE table1 a
    INNER JOIN table2 b
    ON a.id = b.id
    SET a.name = b.name,
    a.description = b.description
    WHERE a.id=3; // note a.id, it is safe to use a.id for the passed id as it is been used to join two tables.
于 2013-06-10T10:27:05.670 回答
0

是的,完全没问题。联接可确保您获得正确的数据。

因为这...

ON a.id = b.id

您可以在子句中使用a.id = 3orb.id = 3WHERE

于 2013-06-10T10:20:12.560 回答