Коррелированный подзапрос работает в MySQL, но не возвращает результаты в Oracle - PullRequest
1 голос
/ 24 апреля 2020

РЕДАКТИРОВАНИЕ: введите данные в виде таблицы вместо скриншота

Несколько похоже на другой вопрос, который у меня был, но для проекта класса мы используем этот запрос:

 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 не выдает сообщение об ошибке, а просто говорит: «Нет элементов для отображения».

Насколько я могу судить, данные одинаковы в обеих базах данных и должны возвращать четыре строки, которые отображаются в и таблицы клиентов и сотрудников. Я был бы очень признателен, если бы кто-то мог указать, почему у них разные результаты.

Данные ниже:

 | 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 голосов
/ 24 апреля 2020

Когда я запустил запрос SELECT * к таблице сотрудников, это показало, что столбцы FirstName и LastName были намного шире. Каким-то образом в этих столбцах были пустые места после имен, поэтому они не регистрировались как те же данные, что и таблица клиентов.

Используя функцию 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)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...