作者danielguo (Daniel Guo)
看板Database
标题Re: [SQL ] 关於资料更改部分语法
时间Thu Dec 30 01:17:35 2010
※ 引述《hotline1234 (唉唷我的天啊)》之铭言:
: 各位好,
: 我先行试着将问题描述清楚,
: 再请各位给点意见或方向,
: 谢谢。
: 我的问题如下:
: TABLE A
: a1 a2 score
: ----------------------------------------
: AA BB 1
: BB CC 2
: AA CC 2
: BB AA 3
: CC BB 3
: 想利用SQL语法更新(或新增)资料表,
: 内容是表A的对称关系,
: 例如 AA与BB=1,BB与AA为3,
: 更新後无论AA BB或BB AA皆为4
先确保有反向的记录
INSERT IGNORE INTO `tableA` (`a1`, `a2`, `score`)
SELECT a.`a2`, a.`a1`, 0
FROM `tableA` a;
再用 UPDATE 配合 JOIN 取出 a1, a2 交换的值
UPDATE `tableA` a
LEFT JOIN `tableA` aa
ON a.`a1` = aa.`a2` AND a.`a2` = aa.`a1`
SET a.`score` = a.`score` + aa.`score`
我会考虑再加一个 rev_score 栏位 (随便取的)
并且 tableA 只存 a1 <= a2 的 row, 变成
TABLE A
a1 a2 score rev_score
----------------------------------------
AA BB 1 3
BB CC 2 3
AA CC 2 null
这样就很简单了. 并且资料少, 更新更快. 不用 INSERT, UPDATE 时也不用 JOIN.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 71.84.58.153
1F:推 hotline1234:非常感谢您的建议与说明,对我帮助很大,谢谢!:D 12/30 12:15