使用INNER JOIN添加另一个WHERE条件时,Oracle SELECT失败

时间:2016-08-19 03:07:43

标签: sql oracle

使用PHP 5.5.29连接到Oracle 12c数据库,在php信息页面安装并验证了OCI8。

此代码正常运行并返回所有匹配的学生

SELECT pcs.Student_Number as SNUMBER, pcs.STRING_VALUE as PW, s.GUARDIANEMAIL as GEMAIL, s.WEB_ID as LOGIN, s.FIRST_NAME as FN, s.LAST_NAME as LN, pec.EMAILADDRESS as EMAIL
    FROM PVSIS_CUSTOM_STUDENTS pcs
        INNER JOIN STUDENTS s
          ON pcs.STUDENT_NUMBER = s.STUDENT_NUMBER
        INNER JOIN GuardianStudent gs 
          ON s.DCID = gs.STUDENTSDCID
        INNER JOIN PCAS_EMAILCONTACT pec 
          ON gs.GUARDIANID = pec.EXTERNALIDENT
    WHERE pcs.SCHOOLID=9
          AND pcs.FIELD_NAME='web_password' 
          AND s.ENROLL_STATUS=0

然而,添加另一个条件来找到一个学生失败并且似乎没有返回错误,只找到0行。我正在使用" 12345"例如,是的它是一个数字字段,所以我不需要引用它。

SELECT pcs.Student_Number as SNUMBER, pcs.STRING_VALUE as PW, s.GUARDIANEMAIL as GEMAIL, s.WEB_ID as LOGIN, s.FIRST_NAME as FN, s.LAST_NAME as LN, pec.EMAILADDRESS as EMAIL
    FROM PVSIS_CUSTOM_STUDENTS pcs
        INNER JOIN STUDENTS s
          ON pcs.STUDENT_NUMBER = s.STUDENT_NUMBER
        INNER JOIN GuardianStudent gs 
          ON s.DCID = gs.STUDENTSDCID
        INNER JOIN PCAS_EMAILCONTACT pec 
          ON gs.GUARDIANID = pec.EXTERNALIDENT
    WHERE pcs.SCHOOLID=9
          AND pcs.FIELD_NAME='web_password' 
          AND s.ENROLL_STATUS=0 
          AND s.STUDENT_NUMBER=12345

3 个答案:

答案 0 :(得分:1)

我无法看到任何明显的"错误"用你的sql。 但是,如果学生12345以任何方式丢失来自(dcis,studentsdcid,guardianid,externalident,student_number)的数据,或者任何表中没有匹配的数据。然后,由于您正在使用内部联接,因此不会返回任何记录。

2条建议:

*当您尝试搜索学生12345时,尝试将内部联接更改为左联接。如果它返回任何数据,您将看到可能缺少的内容

*尝试从第一个sql语句中搜索出现在列表中的学生。如果这仍然没有返回任何记录,那么你可能需要重构你的sql语句

答案 1 :(得分:0)

这可能导致没有任何记录符合这些条件,因为它是legendCallback。尝试将最后一个条件设为AND条件,并查看

OR

答案 2 :(得分:0)

我不是在编写整个查询,只是下面的示例 使用OR条件:

SELECT pcs.Student_Number as SNUMBER, pcs.STRING_VALUE as PW,
s.GUARDIANEMAIL as GEMAIL, s.WEB_ID as LOGIN, s.FIRST_NAME as FN,
s.LAST_NAME as LN, pec.EMAILADDRESS as EMAIL
FROM PVSIS_CUSTOM_STUDENTS pcs
    INNER JOIN STUDENTS s
      ON pcs.STUDENT_NUMBER = s.STUDENT_NUMBER
    INNER JOIN GuardianStudent gs 
      ON s.DCID = gs.STUDENTSDCID
    INNER JOIN PCAS_EMAILCONTACT pec 
      ON gs.GUARDIANID = pec.EXTERNALIDENT
WHERE pcs.SCHOOLID=9
      AND pcs.FIELD_NAME='web_password' 
      AND s.ENROLL_STATUS=0 
      AND s.STUDENT_NUMBER=12345
      OR
      <other Student details>