相关子查询在MySQL中运行,但在Oracle中不返回结果

时间:2020-04-23 22:58:28

标签: mysql sql oracle

已编辑:将数据作为表格而不是屏幕截图

与我遇到的另一个问题有点类似,但是对于一个班级项目,我们正在使用此查询:

 SELECT     E1.EmployeeID, E1.FirstName, E1.LastName 
 FROM       EMPLOYEE E1 
 WHERE      EXISTS 
      (SELECT    C1.LastName 
      FROM       CUSTOMER C1 
      WHERE      E1.LastName = C1.LastName 
      AND        E1.FirstName = C1.FirstName); 

在MySQL中有效,并返回3行。但是,尽管两个数据库具有相同的数据,它在Oracle中都不会返回任何结果。 Oracle没有给出错误消息,只是显示“没有要显示的项目”。

据我所知,两个数据库中的数据相同,并且应该返回出现在Customer和Employee表中的四行。如果有人能指出为什么会有不同的结果,我将不胜感激。

以下数据:

 | EmployeeID | LastName  | FirstName |
 |------------|-----------|-----------|
 | 1          | Bibler    | Karl      |
 | 2          | Chagoya   | Cody      |
 | 3          | Ney       | Treyvor   |
 | 4          | Logue     | Nathan    |
 | 5          | Carrillo  | Francisco |
 | 6          | Centeno   | Paulina   |
 | 7          | Kruk      | Christy   |
 | 8          | Montana   | Tony      |
 | 9          | Lara      | John      |
 | 10         | Chaves    | Pancho    |
 | 11         | Smith     | Yazmin    |
 | 12         | Garcia    | Lydia     |
 | 13         | Smith     | Will      |
 | 14         | Lopez     | Jennifer  |
 | 15         | Oneal     | Shaq\`    |
 | 16         | Rose      | Derrick   |
 | 17         | Williams  | Serena    |
 | 18         | Basseti   | Feddy     |
 | 19         | James     | Lebran    |
 | 20         | Fernandez | Vincent   |

和客户:

 | lastname | firstname |
 |----------|-----------|
 | Bibler   | Karl      |
 | Chagoya  | Cody      |
 | William  | Thomas    |
 | Logue    | Nathan    |
 | etc      | etc       |

两者都有20行,但其中只有三行是返回的唯一行。

1 个答案:

答案 0 :(得分:0)

当我在employee表上运行SELECT *查询时,它显示FirstName和LastName列宽得多。不知何故,这些列的名称后面都有空格,因此它们不会注册为与customer表相同的数据。

使用TRIM功能,我可以获得所需的结果。

 SELECT     E1.EmployeeID, E1.FirstName, E1.LastName 
 FROM       EMPLOYEE E1 
 WHERE      EXISTS 
      (SELECT    C1.LastName 
      FROM       CUSTOMER C1 
      WHERE      TRIM(E1.LastName) = TRIM(C1.LastName) 
      AND        TRIM(E1.FirstName) = TRIM(C1.FirstName));