我要尋找以下:MySQL查詢,從一個表查找並插入到第二個表
需要這方面的條件行:與前三個字符設備列的常見值來自兩個表的接口列。
然後,與Table1中的上述條件匹配的行檢索Specified列的值,並將其存儲在Table2的Avgin列中上述條件匹配的行中。
有人可以幫我嗎?數據庫是MySQL。
我要尋找以下:MySQL查詢,從一個表查找並插入到第二個表
需要這方面的條件行:與前三個字符設備列的常見值來自兩個表的接口列。
然後,與Table1中的上述條件匹配的行檢索Specified列的值,並將其存儲在Table2的Avgin列中上述條件匹配的行中。
有人可以幫我嗎?數據庫是MySQL。
如果有多個匹配項,則只會使用第一個匹配項。 如果沒有,則會使用null。如果您想要別的東西,請使用ifnull()
。
UPDATE
table2
SET
avgin=ifnull(
(
SELECT
Specified
FROM
table1
WHERE
table1.Device=table2.Device
AND substring(table1.Interface,1,3)=substring(table2.Interface,1,3)
LIMIT 1
),
'default value'
)
編輯:添加ifnull()
UPDATE
與JOIN
是你所需要的在這裏,像這樣:
UPDATE Table2 AS t2
INNER JOIN table1 AS t1 ON LEFT(t2.Interface, 3) = LEFT(t1.Interface, 3)
AND t1.Device = t2.Device
SET t2.Avgin = t1.specified;
隨着JOIN
條件,因爲你在你的問題解釋說:
LEFT(t2.Interface, 3) = LEFT(t1.Interface, 3)
AND
t1.Device = t2.Device
LEFT
會給你從這兩個表左邊的前3個字符。
看到它在這裏的行動:
這將使table2
樣子:
| CID | DEVICE | INTERFACE | AVGIN |
---------------------------------------------------
| HDC-HKG-R01 | HDC-TBONE-P1 | P09/0/0 | 121.36 |
| OCB-OCD-R01 | OCB-PE1 | Gi5/2 | 0.17 |
| HDC-BSA-R01 | HDC-TBONE-P1 | Se9/2/0 | (null) |
謝謝!:)它按我的需要工作。 – 2013-04-07 06:37:46
@Sanchit - 隨時歡迎您:) – 2013-04-07 06:38:04
有沒有辦法通過我可以設置兩個正確的答案?你和nl-x都對.. – 2013-04-07 06:45:49
使用此確認你得到你行」重新期待(即之前更新任何東西):
SELECT
t1.Specified
FROM
table2 t2
INNER JOIN table1 t1
ON t1.device = t2.device
AND LEFT(t1.interface,3) = LEFT(t2.interface,3)
然後,假設是正確的:我們正在使用INNER JOIN ...這意味着,從表2的行具有在表1中沒有對應的行,從丟棄結果
UPDATE table2 t2
INNER JOIN table1 t1
ON t1.device = t2.device
AND LEFT(t1.interface,3) = LEFT(t2.interface,3)
SET t2.Avgin = ifnull(t1.specified,'Default Value For When t1.Specified is NULL')
注(這是你想要的)。
的IFNULL
將允許您使用默認值的情況下,當你加入成功(因爲device
和第interface
3個字符是兩個表共用),但table1.specified
有該行的NULL值。
嗨,謝謝!它的工作,但如何和我應該在哪裏使用ifnull()?我是MySQL新手。 – 2013-04-07 06:34:06
@Sanchit我編輯了包含ifnull的答案 – 2013-04-07 06:38:26
謝謝! :)它的工作:D – 2013-04-07 06:42:46