【问题标题】:Select All Records From One Table, Specific Records From Another从一个表中选择所有记录,从另一个表中选择特定记录
【发布时间】:2012-12-17 14:05:42
【问题描述】:

我有三张桌子。

Table1(Table1Id, Field1, Field2)
Table2(Table2Id, Table1Id, AuditDate, Field1, Field2)
Table3(Table3Id, Table1Id, AuditDate, Field1, Field2)

我想要做的是选择 Table1 中的所有记录和字段,查看 Table2 和 Table3 以查找匹配的 Table1Id,然后从 Table3 中选择具有最新 AuditDate 的记录。我觉得我需要进行这样的查询。

SELECT DISTINCT Table1.Table1Id, Table1.Field1, Table1.Field2,
               Table2.Field1, Table2.Field2,
               Table3.Field1, Table3.Field2
FROM (Table1 
INNER JOIN Table2 ON Table1.Table1Id = Table2.Table2Id)
INNER JOIN Table3 ON Table1.Table1Id = Table3.Table3Id
WHERE Table3.AuditDate =
    (SELECT MAX(AuditDate) FROM Table3
     WHERE Table1.Table1Id = Table3.Table3Id)

这个半有效。例如,如果 Table3 中没有任何与 Table1 相关的记录,则不会返回任何内容。我需要确保为 Table1 中的每条记录创建一条记录。

【问题讨论】:

  • 我已将此问题标记为删除,因为它没有得到正确解释,并且我不想在发布答案后对其进行编辑。我已经在另一个问题中正确解释了。

标签: sql ms-access join


【解决方案1】:

应该是这样的查询:

SELECT t1.field1..t1.fieldN, t2.field1 ... t2.fieldN, t3.field1 ... t3.fieldN
FROM table1 AS t1
JOIN table2 AS t2 ON t1.id=t2.id
JOIN table3 AS t3 ON t2.id=t3.id

【讨论】:

    【解决方案2】:

    这可能对你有帮助,

    select Table1Id,field1,field2 from Table1,Table2,Table3 
        where 
            Table1.Table1Id=Table2.Table2Id and 
            Table1.Table1Id=Table3.Table2Id and 
            Table2.AuditDate=Table3.AuditDate 
        group by Table1Id,field1,field2 
        having Table2.AuditDate = (
            Select max(AuditDate) from Table1,Table2,Table3 
                where  
                    Table1.Table1Id=Table2.Table2Id and 
                    Table1.Table1Id=Table3.Table2Id and  
                    Table2.AuditDate=Table3.AuditDate 
                group by Table2.AuditDate
        );
    

    【讨论】:

      【解决方案3】:

      听起来您想要原始查询的结果,以及 Table1 中在 Table3(或 Table2)中找不到对应记录的记录。这可以通过将INNER JOINs 替换为LEFT JOINs 并将WHILE 子句转换为ON 子句来获得。然后你得到这个查询,即使在其他表中没有找到相应的记录,它也会从 Table1 中返回记录。

      SELECT DISTINCT Table1.Table1Id, Table1.Field1, Table1.Field2,
                     Table2.Field1, Table2.Field2,
                     Table3.Field1, Table3.Field2
      FROM (Table1 LEFT JOIN Table2
      ON Table1.Table1Id = Table2.Table2Id)
      LEFT JOIN Table3
      ON Table1.Table1Id = Table3.Table3Id
      AND Table3.AuditDate =
          (SELECT MAX(AuditDate) FROM Table3
           WHERE Table1.Table1Id = Table3.Table3Id)
      

      【讨论】:

        【解决方案4】:

        试试

        SELECT * FROM Table1 AS T1
            JOIN Table2 AS T2 ON T1.Table1Id = T2.Table1Id 
            JOIN Table3 AS T3 ON T1.Table1Id = T3.Table1Id 
            GROUP BY T2.AuditDate
        

        【讨论】:

          猜你喜欢
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          • 1970-01-01
          • 2021-01-26
          • 2022-11-13
          相关资源
          最近更新 更多