SELECT INNER JOIN在两个表上没有提取任何数据

时间:2017-05-18 10:46:50

标签: sql

我试图从两个表中提取相同的数据。一个表是前几个月的数据,称为MAArchive,ManualAdjustment表是当前月份。我想运行一个查询,从两个表中提取相同的数据,具体取决于从下拉列表中选择的PTLName。

我创建了以下查询,但是当它运行时,它不会从表中提取任何数据而且没有错误。

SELECT DISTINCT maarchive.ptlname, 
                maarchive.campusoccurred, 
                maarchive.deptoccurred, 
                maarchive.coursedetails, 
                maarchive.dateoccurred, 
                manualadjustments.ptlname        AS Expr1, 
                manualadjustments.campusoccurred AS Expr2, 
                manualadjustments.deptoccurred   AS Expr3, 
                manualadjustments.dateoccurred   AS Expr4 
FROM   maarchive 
       INNER JOIN manualadjustments 
               ON maarchive.maindex = manualadjustments.maindex 
                  AND maarchive.ptlname = manualadjustments.ptlname 
WHERE  ( maarchive.ptlname = @PTLName )

3 个答案:

答案 0 :(得分:2)

FULL OUTER JOIN

可能是你在那种情况下寻找的东西。

这是关于联接以及它们如何工作的一个很好的解释。

https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

答案 1 :(得分:0)

您可以尝试这种语法:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
INTERSECT
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

SQL INTERSECT运算符用于返回2个或更多SELECT语句的结果。但是,它仅返回由所有查询或数据集选择的行。如果记录存在于一个查询中而不存在于另一个查询中,则它将从INTERSECT结果中省略。

答案 2 :(得分:0)

我建议从LEFT JOIN开始:

SELECT a.ptlname, a.campusoccurred, a.deptoccurred, a.coursedetails, a.dateoccurred, 
       ma.ptlname AS Expr1, ma.campusoccurred AS Expr2, 
       ma.deptoccurred AS Expr3, ma.dateoccurred AS Expr4 
FROM maarchive a LEFT JOIN
     manualadjustments ma
     ON a.maindex = ma.maindex AND
        a.ptlname = ma.ptlname 
WHERE a.ptlname = @PTLName;

然后你可以调查为什么事情不匹配。

根据您的说明,我不明白为什么SELECT DISTINCT是必要的。