MySQL SELECT 中使用 LEFT JOIN 的空行

Mes*_*din 0 mysql left-join

我有三个表,分别称为:usersfacilitiesstaff_facilities

users包含平均用户数据,在我的例子中最重要的字段是users.idusers.firstusers.last

facilities还包含相当多的数据,但除了 之外,没有一个数据一定与此示例相关facilities.id

staff_faciltiesstaff_facilities.id由(int,auto_inc,NOT NULL)、staff_facilities.users_id(int,NOT NULL) 和staff_faciltities.facilities_id(int,NOT NULL)组成。(那是一口!)

staff_facilities引用其他两个表的 ID,我们调用该表来查找用户的设施和设施的用户。

这是我在 PHP 中的选择查询:

SELECT users.id, users.first, users.last FROM staff_facilities LEFT JOIN users ON staff_facilities.users_id=users.id WHERE staff_facilities.facilties_id=$id ORDER BY users.last
Run Code Online (Sandbox Code Playgroud)

该查询在我们的开发服务器上运行得很好,但是当我将其放入客户端的生产环境中时,结果集中经常会出现空白行。我们的开发服务器使用客户端生产服务器上已存在的复制表和数据,但硬件和软件差异很大。

这些行没有任何信息,包括需要在数据库中输入 NOT NULL 值的三个 id 字段。通过后端的MySQL管理工具运行查询会返回相同的结果。在表中搜索 NULL 字段没有找到任何结果。

另一个奇怪的事情是,空行的数量根据 WHERE 子句 id 检查导致的不同结果而变化。通常大约有一到三个空行,但使用相同参数时它们是一致的。

我曾多次处理过由于 LEFT JOINS 而返回几乎重复的行,但我以前从未发生过这种情况。就显示信息而言,我可以轻松地向最终用户隐藏它。我主要担心的是,随着时间的推移和记录数量的增加,这个问题将会变得更加复杂。目前,该系统刚刚安装完毕,表中已经有 2000 多条记录staff_facilities

任何见解或方向将不胜感激。我还可以提供更详细的示例和信息。

HLG*_*GEM 5

您仅从连接右侧的表中选择列。当然,其中一些是完全空的,你做了左连接。因此,这些记录与连接左侧表中的 ID 匹配,但不与连接右侧的任何数据匹配。由于您没有从左表中返回任何列,因此您看不到任何数据。

  • 嘿,我无法告诉你有多少次我盯着某样东西试图找出问题所在,而当我向他们展示它时,其他人立刻就发现了它。我想我们都经历过这样的情况。 (3认同)
  • 哦,我的话。*拍拍额头*我已经盯着这个看太久了。完全就是这样。简单明了。拥有一双新鲜的眼睛是有帮助的。万分感谢! (2认同)