我有一个非常简单的MySQL查询要实现,但我无法弄清楚如何......
我有两张桌子, T1 和 T2 。
从 T1 ,我根据 CODE 值检索 ID :
SELECT id FROM T1 WHERE code = '$code';
然后我需要使用此 ID (因此我刚刚检索到的值)来更新 T2 中的特定行(该行的名称将与 ID 的价值)。
我在考虑使用子查询或用户定义的变量,但无论我如何尝试,我都无法完成它。
如果您有任何可以帮助我这样做的代码段,我也会很感激!
只是为了澄清一些事情:我不知道我需要在 T2 中更新的列的名称,因为该名称将是我从 T1 检索的值>
例如,如果我从 T1 获得的 ID 是“ 03 ”,它将更新名为“”的列03 “在 T2 。
这是我打算实现的一个小模式(希望我让自己更清楚,我为这个误解感到抱歉......)
答案 0 :(得分:4)
UPDATE T2 SET COL = YOUR_VALUE
WHERE T2.ID = (SELECT id FROM T1 WHERE code = '$code')
更新:如果子查询返回多行,则可以使用IN
运算符
UPDATE T2 SET COL = YOUR_VALUE
WHERE T2.ID IN (SELECT id FROM T1 WHERE code = '$code')
答案 1 :(得分:4)
UPDATE
使用JOIN
:
UPDATE T2
CROSS JOIN T1
SET T2.`0` = IF(T1.id = 0, T1.someColumn, T2.`0`),
T2.`1` = IF(T1.id = 1, T1.someColumn, T2.`1`),
T2.`2` = IF(T1.id = 1, T1.someColumn, T2.`1`)
WHERE T1.code = '$code'
将someColumn
替换为T1
中包含您要放入T2
的值的列。
答案 2 :(得分:1)
您只需使用join
即可在不使用子查询的情况下进行更新 update t2
inner join t1 on t2.name = t1.id and t1.code ='$code'
set t2.my_col = 'my_value'
但你不应该在你的查询中使用var你有sql注入的风险看看你的param_binding的mysql驱动程序
答案 3 :(得分:0)
UPDATE T2 SET COL = YOUR_VALUE WHERE EXISTS
(SELECT 1 FROM T1 WHERE T2.id=T2.id AND code = '$code')
答案 4 :(得分:0)
如果您希望内部查询中至少有一行
,则可以使用下一个SQL更新T2UPDATE T2 SET COLUMN = VALUE
WHERE T2.ID IN (SELECT ID FROM T1 WHERE CODE = $code)
否则,如果从T1开始,您确定只能获得1条记录
UPDATE T2 SET COLUMN = VALUE
WHERE T2.ID = (SELECT ID FROM T1 WHERE CODE = $code)