MySQL результат запроса не возвращает некоторые строки, которые должны быть в результате - PullRequest
1 голос
/ 27 января 2020

Это запрос, который должен вернуть результат совпадения с найденным потерянным элементом. Согласно моей базе данных ниже, я ожидаю, что она вернет две строки, но возвращается только одна строка. До того, как я добавил вторые строки в tbl_lost_items и tbl_found_items, результатом был пустой набор.

SELECT L.user_id,L.item_type_id,F.found_by FROM tbl_users AS U 
      JOIN tbl_lost_items AS L ON U.id = L.user_id  
      JOIN tbl_item_types AS IT ON IT.id = L.item_type_id
      JOIN tbl_found_items AS F ON F.item_type_id = IT.id
   WHERE U.first_name = F.first_name_in_id AND U.last_name = F.last_name_in_id;

Это результат

+---------+--------------+----------+
| user_id | item_type_id | found_by |
+---------+--------------+----------+
|       6 |            3 |        4 |
+---------+--------------+----------+
1 row in set (0.01 sec)

Это мои таблицы

tbl_users

+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | mohamed    | diaby     |
|  2 | estern     | winluck   |
|  3 | adam       | kisombe   |
|  4 | william    | patrick   |
|  5 | aisha      | diaby     |
|  6 | hanna      | shange    |
+----+------------+-----------+

tbl_found_items

+------------------+-----------------+--------------+----------+
| first_name_in_id | last_name_in_id | item_type_id | found_by | 
+------------------+-----------------+--------------+----------+
| mohamed          | diaby           |            1 |        2 |
| hanna            | shange          |            3 |        4 |
+------------------+-----------------+--------------+----------+

tbl_item_types

+----+-----------------------+
| id | item_type             |
+----+-----------------------+
|  1 | Citizen Identity Card |
|  2 | NHIF                  |
|  3 | Passport              |
|  4 | Voters Card           |
+----+-----------------------+

tbl_lost_items

+----+---------+--------------+---------------------+-----------+-----------+-------------+
| id | user_id | item_type_id | timestamp           | status    | region_id | district_id |
+----+---------+--------------+---------------------+-----------+-----------+-------------+
|  1 |       1 |            1 | 2020-01-26 18:58:04 | Not Found |         6 |          30 |
|  2 |       6 |            3 | 2020-01-27 14:12:19 | Not Found |        11 |          62 |
+----+---------+--------------+---------------------+-----------+-----------+-------------+

Также, когда я удаляю строку в tbl_lost_items и tbl_fite это должно вернуть совпадение, но не появится в результате запроса, а затем повторно ввести ту же информацию снова в эти две таблицы, результат включает совпадение, но затем, если есть новая запись, вставленная в таблицы tbl_lost_items и tbl_found_items, которые должны результат в совпадении совпадение не появляется в результате запроса. Я не могу понять, в чем здесь проблема. Это ошибка в MySQL? Я использую MySQL 8.0.16 на ма c.

1 Ответ

2 голосов
/ 27 января 2020

объединение не соответствует .. в этом случае используйте левое объединение

, возможно, некоторые из ваших значений не совпадают, убедитесь, что вы не скрыли символы с помощью TRIM ()

 SELECT L.user_id,L.item_type_id,F.found_by FROM tbl_users AS U 
      JOIN tbl_lost_items AS L ON U.id = L.user_id  
      JOIN tbl_item_types AS IT ON IT.id = L.item_type_id
      JOIN tbl_found_items AS F ON F.item_type_id = IT.id
      WHERE  TRIM(U.first_name)  = TRIM(F.first_name_in_id)
      AND TRIM(U.last_name) = TRIM(F.last_name_in_id) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...