使用SELECT结果查询另一个表的行

时间:2018-02-06 17:00:40

标签: mysql sql subquery

我有一个非常简单的MySQL查询要实现,但我无法弄清楚如何......

我有两张桌子, T1 T2

我需要做什么:

T1 ,我根据 CODE 值检索 ID

SELECT id FROM T1 WHERE code = '$code';

然后我需要使用此 ID (因此我刚刚检索到的值)来更新 T2 中的特定行(该行的名称将与 ID 的价值)。

我在考虑使用子查询或用户定义的变量,但无论我如何尝试,我都无法完成它。

如果您有任何可以帮助我这样做的代码段,我也会很感激!

修改

只是为了澄清一些事情:我不知道我需要在 T2 中更新的列的名称,因为该名称将是我从 T1 检索的值>

例如,如果我从 T1 获得的 ID 是“ 03 ”,它将更新名为“”的列03 “在 T2

编辑2

这是我打算实现的一个小模式(希望我让自己更清楚,我为这个误解感到抱歉......)

enter image description here

5 个答案:

答案 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更新T2
UPDATE 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)