我想学习如何比较两个表,以便找到不匹配的记录。
我是MySQL的初学者,因此目前正在努力找出用于比较两个表的查询。
假设我有两个结构相同的表。
表1(旧)
+------+--------+---------------+--------+-----------+
| "id" | "name" | "price" | "description" | "country" |
+------+--------+---------------+--------+-----------+
| "1" | "a" | "2" | "Lord " | "US" |
| "2" | "b" | "3" | "Taker" | "UK" |
+------+--------+---------------+--------+-----------+
表2(新)
+------+--------+---------------+--------+-----------+
| "id" | "name" | "price" | "description" | "country" |
+------+--------+---------------+--------+-----------+
| "1" | "a" | "5" | "Lord" | "DE" |
| "2" | "b" | "6" | "Taker" | "JP" |
+------+--------+---------------+--------+-----------+
Table1保存过时的数据,table2保存最新的数据。
我想检查表2中的名称,价格,描述字段是否与表1中的名称,价格,描述字段匹配。如果不匹配,则应使用表2中的数据更新表1。
我检查了folling网站,以便找出使用哪个Mysql查询: http://www.mysqltutorial.org/compare-two-tables-to-find-unmatched-records-mysql.aspx
但我无法弄清楚如何用Python写下来。
我是新手在python中使用SQL语句,我试过它,
import sys, mysql.connector
import mysql
try:
connection = mysql.connector.connect\
(host = "localhost", user = "root", passwd ="", db = "local")
except:
print("No connection")
sys.exit(0)
cursor = connection.cursor()
cursor.execute("SELECT name, price, description FROM table2_new WHERE
我真的不知道如何继续。我搜索了类似的任务,但没有完全理解如何在Python中完成它。
表1中所需的输出,价格应该更新:
+------+--------+---------------+--------+-----------+
| "id" | "name" | "price" | "description" | "country" |
+------+--------+---------------+--------+-----------+
| "1" | "a" | "5" | "Lord " | "US" |
| "2" | "b" | "6" | "Taker" | "UK" |
+------+--------+---------------+--------+-----------+
你可以帮帮我吗?任何反馈都表示赞赏。
答案 0 :(得分:1)
尝试;
update table_1 a
join table_2 b
on a.`name` = b.`name` and a.`description` = b.`description`
set a.`price` = b.`price`
此query
将price
更新table_1
price
table_2
description
name
和var myDate = new Date(sheet.getRange(3,1).getValue());
var year = Utilities.formatDate(myDate, "Europe/Amsterdam", 'dd-MM-yyyy');
var weekyear = Utilities.formatDate(myDate, "Europe/Amsterdam", 'dd-MM-YYYY');
var week = Utilities.formatDate(myDate, "Europe/Amsterdam", 'w');
匹配。 (要注意不止一场不会给出你期望的结果的比赛)
答案 1 :(得分:1)
你的SQL查询将是:
UPDATE t1
SET t1.name = t2.name
from table1 as t1
inner join table2 as t2
on t1.id = t2.id
AND t1.name != t2.name
然后对每个字段重复。
答案 2 :(得分:1)
首先,你的表绑定哪个字段(-s)?我们将其命名为bind_field
。如果有多个字段,那么它将是bind_field1
,bind_field2
和其他字段。您的查询:
UPDATE table1 t1
INNER JOIN table2 t2
ON t1.bind_field = t2.bind_field [AND t1.bind_field1 = t2.bind_field2 ...]
SET t1.name = t2.name, t1.price = t2.price, t1.description = t2.description
查询更新了name
的{{1}},price
,description
字段,table1
的值仅适用于具有相同table2
的行(-s,如果有多个绑定字段)。
bind_field
语句允许您绑定表的方式。
ON
语句允许您控制更新值。
在我看来,你使用带有id的文本(SET
或相同的)类型字段。如果是这样,那么您应该将其更改为数字类型字段,如VARCHAR
;
P.S。对不起我的英文:)