【问题标题】:INNER JOIN inside Subquery SQL子查询 SQL 中的 INNER JOIN
【发布时间】:2017-05-27 10:32:48
【问题描述】:

我在子查询中插入内部联接时遇到问题,如下所示:

SELECT * FROM (
    SELECT *,
    (DATEDIFF(day, Date, CurrentDate)) AS Age
    FROM Order_Member   
)sub
    WHERE Age > 7

在这种情况下,它会产生如下输出:

OrderID    Date     CurrentDate Quantity Total Age
 O01    2017-05-22  2017-05-31     3      150   9
 O02    2017-05-23  2017-05-31     2      160   8

哪个运行正确,仅显示年龄 > 7,但我无法使用 INNER JOIN 将另一个表放入子查询中。 有什么帮助吗?

【问题讨论】:

    标签: sql subquery inner-join


    【解决方案1】:

    当然可以,只需在子查询中添加inner join 子句即可:

    SELECT * FROM (
        SELECT    *,
                  (DATEDIFF(day, Date, CurrentDate)) AS Age
        FROM       Order_Member om   
        INNER JOIN Other_Table ot on om.id = ot.id -- Here
    )sub
        WHERE Age > 7
    

    【讨论】:

    • INNER JOIN OrderWithMember ON Order_Member.OrderID = OrderWithMember.OrderID 它显示如下:Msg 8156, Level 16, State 1, Line 265 The column 'OrderID' was specified multiple times for 'sub'.
    • @JoesLie 您需要完全限定您选择的列
    • 是的,我已经在两张桌子上都获得了 OrderID 资格,我不明白
    【解决方案2】:

    在查看您的问题和查询后,我认为您甚至不需要子查询

    SELECT om.*, ot.*, (DATEDIFF(day, Date, CurrentDate)) Age
    FROM Order_Member om
    INNER JOIN  Other_Table ot on om.id = ot.id -- Here
    WHERE  (DATEDIFF(day, Date, CurrentDate)) >7
    

    除此之外,您还有其他选项,例如 Cross Apply。

    【讨论】:

    • 但是当我使用你的代码时,我会产生重复,我的 other_table (OrderWithMember) 会为 M01、M02、M03、M04、M05 产生 O01。而不是之前配置了 fk 的 M01。但是当我尝试使用子查询时,它不会产生重复
    【解决方案3】:

    你可以用table1、table2代替sub

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 2014-02-24
      • 1970-01-01
      • 2013-12-22
      • 2015-01-10
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多