sql查询使用连接来连接3个表

时间:2011-06-10 09:53:53

标签: sql tsql

我想显示3个表(数据记录,温度,压力)的列值,如下所示,我的查询也如下所示,但这里的温度值是重复的,我想要特定日期的所有相应值我该怎么做?请有人帮帮我吗?

表是

  1. datalogging5

    name     shift name   operator   id   date                     plant   line   machi
    -------  -----------  ---------  ---  -----------------------  ------  -----  -----
    ashwini  shift1(7-3)  Operator1  102  2011-06-07 00:00:00.000  Plant1  Line1  mc1
    pradeep  shift1(7-3)  Operator1  101  2011-06-06 00:00:00.000  Plant1  Line1  mc1
    ...
    
  2. 温度图

    temprature  time                     date
    ----------  -----------------------  -------------------
    27          1900-01-01 15:45:41.000  2011-06-06 00:00:00
    27.3        1900-01-01 15:50:41.000  2011-06-06 00:00:00
    ...
    
  3. 压力

    temprature  time                     date
    ----------  -----------------------  -------------------
    0.5         1900-01-01 15:45:41.000  2011-06-06 00:00:00
    0.7         1900-01-01 15:50:41.000  2011-06-06 00:00:00
    ...
    
  4. 我的SQL查询是

    select Date=convert(varchar(12),(t1.date),101), t1.time, operatorname, 
        machine, line, t2.time, Temprature, Pressure
    from datalogging5 t 
    inner join temprature t1 on t1.date=t.date 
    inner join pressure t2 on t.date=t2.date  order by t.date
    

2 个答案:

答案 0 :(得分:1)

我不是特别流利的SQL,所以如果我做错了让我知道,但你不能只做一些事情:


SELECT CONVERT(varchar(12),(t1.date),101) AS Date, t1.time, t.operatorname, 
    t.machine, t.line, t2.time, t1.temprature, t2.pressure
FROM datalogging5 t 
INNER JOIN temprature t1 ON t1.date=t.date 
INNER JOIN pressure t2 ON t.date=t2.date
WHERE t.date = '2011-6-10'
ORDER BY t.date;

您可以将2011-6-10替换为您的搜索查询。 至于你的温度重复问题,我认为问题是你试图通过日期列连接表。有多个数据记录或温度条目可能具有相同的日期,因此当您运行查询时,它将为每个匹配的记录显示一次,使其看起来像重复。

无论如何,请告诉我该代码是否与您所寻找的无关。

答案 1 :(得分:1)

您需要在日期和时间加入温度和压力表(因为它们显然存储在单独的列中)

Select D.Date, T.Time...
From DataLoggings As D
    Join Temperature As T
        On T.Date = D.Date
    Join Pressure As P
        On P.Date = T.Date
            And P.Time = T.Time

您的架构和此查询有一些问题:

  1. 温度表中的时间必须与压力表中的时间完全匹配,毫秒,毫秒。
  2. 您必须同时具有指定时间的温度读数和压力读数才能在列表中返回。解决这个问题的一种方法是从数字或理货表中建立一个秒的时间表,这是一个丑陋的解决方案。
  3. 您可以考虑使用测量表而不是单独的温度和压力表。如下所示:

    Create Table Measurements
        (
        ReadingType varchar(15) not null
        , Reading float not null
        , Date date not null
        , Time time not null
        , Check( ReadingType In('Temperature','Pressure') )
        )