【问题标题】:MySQL query result does not return some rows that should be in the resultMySQL 查询结果没有返回一些应该在结果中的行
【发布时间】:2020-01-27 23:26:57
【问题描述】:

这是一个应该返回已找到的丢失物品​​的匹配结果的查询。根据我下面的数据库,我希望它返回两行,但只返回一行。在我在 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_found_items 中删除应该返回匹配项但未出现在查询结果中的行时,然后在这两个表中再次重新输入相同的信息时,结果包含匹配项,但随后如果在表 tbl_lost_items 和 tbl_found_items 中插入了一条应该导致匹配的新记录,则匹配不会出现在查询结果中。我不知道这里有什么问题。这是 MySQL 中的错误吗?我在 Mac 上使用 MySQL 8.0.16。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    连接不匹配..在这种情况下使用左连接

    可能是您的某些值不匹配,请确保您没有使用 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) 
    

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2016-08-22
      • 2015-02-25
      • 1970-01-01
      相关资源
      最近更新 更多