首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语句使用多个表中的数据拉取列表

SQL语句使用多个表中的数据拉取列表
EN

Stack Overflow用户
提问于 2009-02-11 22:00:32
回答 5查看 2K关注 0票数 1

感谢您的回复。下面是映射到labid=4的problem....the oildatasetstatusid (5-11)。Labid=4有多个客户的输入数据,因此不能基于oildatasetstatusid执行更新。更新必须基于samplepointid。这就是为什么使用3张表的原因。

我是SQL中的一员,被要求执行一项超出我理解范围的任务。我们的客户希望更改其现有的严重级别,例如从低警告(severityid=7)更改为低(severityid=18)。严重性信息由第三方石油实验室输入数据库。我希望使用来自三个不同表的信息生成一个列表,然后更改该列表上的严重性映射。我是否在下面提供了足够的信息?谁能帮帮忙?

代码语言:javascript
复制
table: samplepoint
 - samplepointid

table: oildataset
 - oildatasetid
 - oillabid (4=R&G)
 - samplepointid

table: Oildatasetstatus
 - Oildatasetid
 - Oildatasetstatusid (5,6,7,8,9,10,11) needs to be changed to (16,17,18,19,20)
    - 5=16
    - 6=17
    - 7,8,9=18
    - 10=19
    - 11=20
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-11 22:24:27

我希望使用来自三个不同表的信息生成一个列表

您发布的模式在samplepoint表中没有实际信息,因此它实际上只是来自两个表的信息。从本质上说,我猜你只是想把‘oillabid’和‘samplepointid’值从‘oildataset’连接到‘oildatasetstatus’的每一行?

代码语言:javascript
复制
SELECT *
FROM oildatasetstatus
JOIN oildataset ON oildataset.oildatasetid=oildatasetstatus.oildatasetid

然后,

更改该列表上的严重性映射。

我猜你的意思是希望你的查询具有不同的严重性,而不是实际地UPDATEing你存储的‘oildatasetstatus’表?如果是这样,您可以使用CASE运算符:

代码语言:javascript
复制
SELECT
    oildataset.oildatasetid, oildataset.oillabid, oildataset.samplepointid,
    CASE oildatasetstatus.oildatasetstatusid
        WHEN 5 THEN 16
        WHEN 6 THEN 17
        WHEN 7 THEN 18
        WHEN 8 THEN 18
        WHEN 9 THEN 18
        WHEN 10 THEN 19
        WHEN 11 THEN 20
    END AS newstatus
FROM oildatasetstatus
JOIN oildataset ON oildataset.oildatasetid=oildatasetstatus.oildatasetid
票数 1
EN

Stack Overflow用户

发布于 2009-02-11 22:15:24

我不知道你是否会做其他的事情,但如果你只是想取代那些严酷的东西,那就这样做:

UPDATE Oildatasetstatus SET Oildatasetstatusid=16 WHERE Oildatasetstatusid=5;

UPDATE Oildatasetstatus SET Oildatasetstatusid=17 WHERE Oildatasetstatusid=6;

更新油类数据集状态集合Oildatasetstatusid=18,其中油类数据集SET IN (7,8,9);

UPDATE Oildatasetstatus SET Oildatasetstatusid=19 WHERE Oildatasetstatusid=10;

UPDATE Oildatasetstatus SET Oildatasetstatusid=11 WHERE Oildatasetstatusid=20;

如果Oildatasetid是主键,那么应该这样做。

要小心,对数据进行备份。

Oildatasetstatusoildataset之间有什么联系

票数 1
EN

Stack Overflow用户

发布于 2009-02-11 22:20:07

如果我理解你的任务,这里有一句话可能会有帮助。你没有说你使用的是什么品牌的数据库软件。

多表SQL语法是非标准UPDATE,只有Microsoft SQL Server和MySQL支持。下面是一个针对MS SQL的示例(未经测试):

代码语言:javascript
复制
UPDATE Oildatasetstatus
SET Oildatasetstatusid = 
  CASE Oildatasetstatusid
    WHEN 5 THEN 16
    WHEN 6 THEN 17
    WHEN 7 THEN 18
    WHEN 8 THEN 18
    WHEN 9 THEN 18
    WHEN 10 THEN 19
    WHEN 11 THEN 20
    ELSE Oildatasetstatusid
  END CASE
FROM Oildatasetstatus
  JOIN Oildataset USING (Oildatasetid)
WHERE Oildataset.Oillabid = 4;

如果您对SQL没有信心,请先在您的数据副本上运行它,并验证它是否如您所期望的那样工作!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/539029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档