php - MySQL:当一个表上存在多个连接时,计算 NULL 或 0 值

标签 php mysql sql

我有一个查询,它根据名为 users 的表中的记录 ID 查找人们的全名。全名与其在另一个表 (table1) 中的角色相关联。这需要多次连接到 users 表:

SELECT table1.id, users.full_name AS "Requester", 
users.full_name AS "Approver," 
users.full_name AS "Ordered By", 
users.full_name AS "Received By" 
FROM table1
JOIN users AS users
ON table1.requester_id = users.id
JOIN users AS users2
ON table1.approver_id = users2.id
JOIN users AS users3 
ON table1.ordered_by = users3.id
JOIN users AS users4
ON table1.received_by = users4.id
WHERE table1.deleted_record !=1;

我遇到的问题是 ordered_byreceived_by。通常,它们还不存在,因为订单既没有被订购也没有被接收,所以它们的 ID 可以为 0,这在 users 表中没有对应的值。当我运行这个查询时,我应该取回所有存在的 475 条记录,但由于那些 0 值,我只取回 365 条记录。如何修改此查询以确保返回所有行,即使 ordered_by 和/或 received_by = 0?

最佳答案

首先,驱动查询的主表应该是 table1。然后,您将使用 JOIN 而不是 LEFT JOIN。如果没有链接,LEFT JOIN 会给你一个空结果,但不会失败。在这种情况下,您可能必须为字段值使用 IF

SELECT table1.id, req.full_name AS "Requester", 
   app.full_name AS "Approver", 
   ordr.full_name AS "Ordered By", 
   rec.full_name AS "Received By" 
FROM table1
LEFT JOIN users AS req
   ON table1.requester_id = req.id
LEFT JOIN users AS app
   ON table1.approver_id = app.id
LEFT JOIN users AS ordr
   ON table1.ordered_by = ordr.id
LEFT JOIN users AS rec
   ON table1.received_by = rec.id
WHERE table1.deleted_record !=1;

应该这样做

关于php - MySQL:当一个表上存在多个连接时,计算 NULL 或 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45886246/

相关文章:

php - 如何在 Laravel 5.4 中使用数据库表值作为常量

php - 如何使用 PHP 和 mySql 为用户配置文件创建单独的 Web 页面?网址重写?

php - mysql_fetch_object 非常慢需要大约 30 秒来加载只有 20 行

sql - 在 SQL Server 中将秒转换为日期时间

php - 如何列出 pecl 包的所有版本

php - 他们是如何在这里应用 Twitter oAuth 的?

php - 代码=3840 "Invalid value around character 0."

java - 无法将多个数据插入数据库

java - 如何使用mysql查询返回计数?

MySQL Group By 多个列中的值相等