2016-01-21 78 views
0

我想更新只有一行使用SQL,但我有麻煩。SQL更新只有一行

我試圖做這樣的事情:

$sql="UPDATE table SET age='$age' WHERE id=(SELECT id FROM another_table WHERE somecondition ORDER BY id LIMIT 1)"; 

但這不在更新任何東西。我覺得括號裏有一些錯誤,但我不確定它究竟有什麼問題。有人有任何想法嗎?或者如何更新只有一行滿足給定條件的其他建議?

編輯說明:

好的,我可能讓我的問題太複雜了。讓我重述一下我的問題。更新只有一行符合某些條件的通用方法是什麼?如果行符合條件,它可以是任何行。

+0

它給錯誤了嗎? –

+0

這不是給我任何錯誤....這是它的奇怪的部分 – dshukertjr

+0

它看起來很奇怪,你從一個表(它標識一個記錄* *)** ** ID **,並希望它匹配ID *另一個*表)。人們寧願期待像'from table1 where id =(SELECT id_table1 from ...)'這樣的東西。所以也許你只是簡單地混淆了ID? –

回答

2

,你應該先運行此查詢:

SELECT id FROM another_table WHERE somecondition ORDER BY id LIMIT 1 

,看到的結果,如果你得到特定的值,例如說1,更新你的代碼

$sql="UPDATE table SET age='$age' WHERE id=(1)"; 

,你可以看到結果。如果查詢不會產生錯誤,所以您的條件不考慮,並且您的表table中沒有1 ID。

0

嘗試運行此查詢:此錯誤的

UPDATE table t 
    SET t.age='$age' 
    WHERE t.id = (SELECT a.id 
        FROM another_table a 
        WHERE somecondition 
        ORDER BY a.id 
        LIMIT 1 
       ); 

一個未少見的原因是當id列有不同的名稱。你應該養成列名合格的習慣。您還應該驗證兩個表中的ID是否匹配。

另一個原因是匹配的條件不會返回不在表中的行或ID。這有點難以解決,這更好地理解數據和數據結構。

1

我發現基於子查詢中的條件進行更新(如您的示例中所示)有時會出現似乎的問題,因爲數據庫試圖找出最佳執行路徑。我發現最好做如下的事情,注意我的代碼在T-SQL中,可能需要調整才能在MySQL中工作。

UPDATE T1 SET [email protected] 
FROM table as T1 INNER JOIN 
    another_table as T2 ON T1.id = T2.id 
WHERE [use appropriate conditions here]