mysql - SQL连接表与空数据检索无

标签 mysql sql

所以我的问题是,假设我有 3 个表:“customerPerAdmin”、“admins”、“customers” 我正在加入他们,但是如果某个用户的 customerPerAdmin.AdminID 为 0 怎么办? 如果它会忽略 adminID 等于 0 的客户,会发生什么,我不希望这种情况发生,我想将 admins.FirstName 和 admin.LastName 设置为空。

customerPerAdmin 表:

ID  AdminID CustomerID
40  20     49           
41  25     48        
42  20     50
43  0      51

这是查询

SELECT SQL_CALC_FOUND_ROWS `customers.UniqID`,
       `customerPerAdmin`.`AdminID`,
       `customerPerAdmin`.`CustomerID`,
       `customerPerAdmin`.`IsDeleted`,
       `customerPerAdmin`.`pr`,
       `admins`.`ID`,
       `admins`.`GroupID`,
       `admins`.`FirstName` AS adminFirstName,
       `admins`.`LastName` AS adminLastName,
       `admins`.`IsDeleted`,
       `customers`.`FirstName`,
       `customers`.`LastName`,
       `customers`.`Phone`,
       `customers`.`Email`,
       `customers`.`GroupID`,
       `customers`.`UniqID`,
       `customers`.`Created`,
       `customers`.`IsDeleted`,
       `customers`.`ID`
FROM (`customers`)
JOIN `customerPerAdmin` ON `customers`.`ID`=`customerPerAdmin`.`CustomerID`
JOIN `admins` ON `admins`.`ID`=`customerPerAdmin`.`AdminID`
AND `customers`.`GroupID` = '8'
AND `customerPerAdmin`.`pr` = 0
GROUP BY `customers`.`ID`
ORDER BY `customers`.`ID` DESC LIMIT 20

那么会发生什么,它只会向我显示 ID 40,41,42 而不是 43,因为他无法将其与 ID 为 0 的管理员关联起来,因为他不存在。 即使不相关,我如何仍能显示 ID 43?

提前致谢。

最佳答案

在您的代码中,您需要从 INNER JOIN 更改为 LEFT OUTER JOIN

通过使用INNER JOIN,您将强制匹配所有行。 LEFT OUTER JOIN 可让您获取主表中的所有行以及连接表中的所有匹配记录。

这是快速而肮脏的JOIN类(class)

INNER JOINJOIN
从所有行都匹配的表中获取数据

LEFT OUTER JOINLEFT JOIN
从主表中获取数据,并且仅从数据可以匹配的连接表中获取数据。

FULL OUTER JOINFULL JOIN
获取两个表中的所有数据并尽可能匹配。

还有RIGHT join,但我从不使用它。它与 LEFT 相同,只是将另一个表作为主要源。有些人在同一个查询中同时使用 LEFTRIGHT,此时我开始怀疑他们是否知道自己在做什么。

除了评论中的链接外,您还可以查看Join Fundamentals from Microsoft

关于mysql - SQL连接表与空数据检索无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22490316/

相关文章:

c# - SQLCommandBuilder 效率

sql - 将当前年龄转换为小数

php - 如何使用 APIController 在 CakePHP 中插入数据?

php - 获取日期范围内最后 4 次计数的平均值

SQL查询选择下订单最多的客户

MySQL:@变量与变量。有什么不同?

SQL 查询 : Facing issues to get desired records from different tables

mysql - Laravel:服务器发送的未知类型 245。

sql - Active Record 会帮助我以数据库中立的方式连接两个字符串吗?

java - 我可以在 java 中设置一些配置标志 null == null 是 false 还是 true?