带变量的sql update语句

时间:2015-07-31 08:35:04

标签: mysql sql

我有两个名为“user”和“logs”的表。

用户表的列名为“userID”,也是pk。

logs表有两列名为“log_detail”和“userID”。

我想要查询的是“从用户表中逐个获取所有user.userID值,并检查它们是否包含此值,如果它计算,则使用此userID值更新logs.userID”。

我尝试了一些查询,但我真的不知道该怎么做。

顺便说一句,我使用的是Mysql。

UPDATE logs
SET logs.userID = user.userID
SELECT userID
FROM logs
WHERE logs.userID LIKE concat("%",user.userID,"%");

4 个答案:

答案 0 :(得分:1)

SQL Fiddle

架构详细信息

create table user
(userid varchar(30));

create table logs
(log_detail varchar(100),
 userid varchar(30));

insert into user values('user1');
insert into user values('user2');
insert into user values('user3');

insert into logs values('update by user1','user3');
insert into logs values('inserted by user2','user2');
insert into logs values('inserted by user3',null);

更新前的表格数据

|        log_detail | userid |
|-------------------|--------|
|   update by user1 |  user3 |
| inserted by user2 |  user2 |
| inserted by user3 | (null) |

更新查询

 update logs join user
set logs.userid=user.userid
where logs.log_detail LIKE concat("%",user.userID,"%");

更新后的表格数据

|        log_detail | userid |
|-------------------|--------|
|   update by user1 |  user1 |
| inserted by user2 |  user2 |
| inserted by user3 |  user3 |

答案 1 :(得分:0)

<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   xmlns:msxsl="urn:schemas-microsoft-com:xslt"
        exclude-result-prefixes="msxsl"
        version="2.0">
       <xsl:variable name="templateMessage" select="document('MyXmldata.xml')" />
      <xsl:variable name="inputData" select="/" />
          <xsl:template match="/">
          <html>
              <body>
                 <xsl:variable name="firstName" select="$templateMessage/inputXml/firstName" />
                 <xsl:variable name="lastName" select="$templateMessage/inputXml/lastName" />
                  <xsl:variable name="StringValue" select="node()" />
                  <xsl:variable name="StringValue1" select="replace($StringValue,'\$firstName',$firstName)" />
                  <xsl:variable name="StringValue2" select="replace($StringValue1,'\$lastName',$lastName)" />
            </body>
         </html>
     </xsl:template>

还要考虑到用户是mysql中的保留关键字

答案 2 :(得分:0)

尝试使用以下查询。我想你会得到你需要的东西。

update logs l
  join users u
    on l.log_detail = u.userid
   set l.userid = u.userid

我认为我们不需要再次编写where条件,因为我们在查询中使用了内连接。

谢谢。

答案 3 :(得分:0)

我对MYSQL不太熟悉,但在oracle中,我们可以满足您的要求,例如

DrawView