2013-04-07 60 views
1

我要尋找以下:MySQL查詢,從一個表查找並插入到第二個表

enter image description here

  • 需要這方面的條件行:與前三個字符設備列的常見值來自兩個表的接口列。

  • 然後,與Table1中的上述條件匹配的行檢索Specified列的值,並將其存儲在Table2的Avgin列中上述條件匹配的行中。

有人可以幫我嗎?數據庫是MySQL。

回答

2

如果有多個匹配項,則只會使用第一個匹配項。 如果沒有,則會使用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()

+0

嗨,謝謝!它的工作,但如何和我應該在哪裏使用ifnull()?我是MySQL新手。 – 2013-04-07 06:34:06

+0

@Sanchit我編輯了包含ifnull的答案 – 2013-04-07 06:38:26

+0

謝謝! :)它的工作:D – 2013-04-07 06:42:46

1

UPDATEJOIN是你所需要的在這裏,像這樣:

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) | 
+0

謝謝!:)它按我的需要工作。 – 2013-04-07 06:37:46

+0

@Sanchit - 隨時歡迎您:) – 2013-04-07 06:38:04

+0

有沒有辦法通過我可以設置兩個正確的答案?你和nl-x都對.. – 2013-04-07 06:45:49

1

使用此確認你得到你行」重新期待(即之前更新任何東西):

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值。

+0

Mahmoud Gamal的解決方案按我的意願工作。謝謝反正:) – 2013-04-07 06:40:12

+0

@Sanchit我的榮幸!是的,馬哈茂德是一個很好的答案。 – Sepster 2013-04-07 06:40:48

+0

@Sanchit如果您對此語法感興趣,請使用IFNULL更新此答案。 – Sepster 2013-04-07 06:46:18

相關問題