我有两张结构相同的桌子。 Table1
保留审核数据,table2
保留其余数据。
表1
+------+--------+---------------+--------+-----------+ | "id" | "name" | "description" | "type" | "country" | +------+--------+---------------+--------+-----------+ | "5" | "a" | "x" | "1" | "US" | | "6" | "b" | "x" | "1" | "UK" | +------+--------+---------------+--------+-----------+
表2
+------+-----------+-----------+-----------------+--------+-----------+----------+ | "id" | orgId | "name" | "description" | "type" | "country" | "status" | +------+-----------+-----------+-----------------+--------+-----------+----------+ | "1" | "5" | "Title 1" | "Description 1" | "1" | "US" | "2" | | "2" | "6" | "Title 2" | "Description 2" | "1 " | "UK" | "2" | | "3" | "6" | "Title 2" | "Description 2" | "1 " | "UK" | "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
的{{1}},id
和type
,然后我将其传递给包含上述sql的函数
现在,我应该在country
子句中指定哪个表?应该是WHERE
还是a ~ table1
。现在它是b ~ table2
,但我在查询字符串中没有得到a
的值,我不能使用a.id
,因为那里有多个。{1}}。此外,通过查询字符串获取它将需要更多的代码和更改几件事。
如果我使用
会没问题orgId
我试过这个并且它有效,但这是正确的做法吗?
答案 0 :(得分: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.
答案 1 :(得分:0)
是的,完全没问题。联接可确保您获得正确的数据。
因此...
ON a.id = b.id
您可以在a.id = 3
子句中使用b.id = 3
或WHERE