MySQL 查询 JOIN 返回 1 个空字段

标签 mysql sql

我有两个简单的表:

用户

+-------------------------------------------------+
|   uid    |     firstname     |     lastname     |
|-------------------------------------------------|
|   4000   |       Zak         |        Me        |
+-------------------------------------------------+

用户角色

+----------------------------------------------+
|   rid    |       uid          |     oid      |
|----------------------------------------------|
|   5      |      4000          |     7000     |
+----------------------------------------------+

我正在使用这个查询

SELECT us.firstname, us.lastname, ur.oid
FROM user us
    LEFT JOIN user_role ur
ON us.uid = ur.uid
WHERE us.firstname = 'Zak';

我的结果是

+-------------------------------------------------+
|     firstname     |     lastname     |   oid    |
|-------------------------------------------------|
|       Zak         |        Me        |  (null)  |
+-------------------------------------------------+

我错过了什么?它必须是简单的东西!

更新

必须对 WHERE 子句做一些事情。因为如果省略,它会返回包含 oid 的所有行

最佳答案

遵循这样的流程:

运行这个查询

SELECT *
FROM user us
WHERE us.firstname = 'Zak';

如果您得到一个结果,Where 子句就可以了。所以现在你运行:

SELECT *
FROM user us
    LEFT JOIN user_role ur
ON us.uid = ur.uid
WHERE us.firstname = 'Zak';

如果你没有得到记录,那么连接有问题。可能是他们有一些不可打印的字符,结果是 4000 <> 4000。那么让我们检查一下。

select * FROM user us where us.uid = 4000
select * FROM user_role us where us.uid = 4000

如果 then 之一没有返回结果,则存在数据问题,其中一个字段包含不可打印的字符。

如果 select * 有效,则再次尝试原始查询,仅添加 user_role 表中的一些其他字段,例如 uid。然后您可以查看联接是否有效但该字段为空,或者联接是否错误或者您可能正在查看错误的字段。

SELECT us.firstname, us.lastname, ur.oid, ur.uid
FROM user us
    LEFT JOIN user_role ur
ON us.uid = ur.uid
WHERE us.firstname = 'Zak';

也有可能连接字段是不同的数据类型,某种类型的隐式转换把它们弄乱了。在这种情况下,您可能想要显式转换或最好设计您的表,以便它们都使用相同的数据类型,因为它们看起来处于 PK/FK 关系中。

关于MySQL 查询 JOIN 返回 1 个空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863041/

相关文章:

php,mysql - 从下拉列表和数据库中删除项目

java - 如何从 java 程序将当前日期插入 oracle 数据库?

sql - 将输出参数设置为 sql 存储过程中 count() 的值

php - 我如何判断 MySQL 查询是否在 PHP 中未返回任何内容?

mysql - sql - 从多个连接表中获取匹配行的计数

java - 如何从 native SQL 查询中绑定(bind)实体对象中的 @Transient 字段

php - 使用 Postgres+PHP 的无缓冲查询?

MySQL 在正常表格中连续 N 天计数

php - 插入 PDO 不起作用

mysql - 如何在MySQL列中插入没有匹配的NULL值?