Php 比较MySQL中的表并添加yes/no响应
有人能帮我调整SQL以获得所需的结果吗。我有一个用户表、一个案例表和一个案例用户关系表 用户表-用户Php 比较MySQL中的表并添加yes/no响应,php,mysql,sql,Php,Mysql,Sql,有人能帮我调整SQL以获得所需的结果吗。我有一个用户表、一个案例表和一个案例用户关系表 用户表-用户 +----+-------+--------+ | id | first | last | +----+-------+--------+ | 1 | Joe | Bloggs | | 2 | John | Doe | | 3 | Jane | Doe | | 4 | Dave | Smith | +----+-------+--------+ 案例表-案例
+----+-------+--------+
| id | first | last |
+----+-------+--------+
| 1 | Joe | Bloggs |
| 2 | John | Doe |
| 3 | Jane | Doe |
| 4 | Dave | Smith |
+----+-------+--------+
案例表-案例
+----+--------+------+
| id | Case | Code |
+----+--------+------+
| 1 | Case 1 | C1 |
| 2 | Case 2 | C2 |
| 3 | Case 3 | C3 |
+----+--------+------+
+----+---------+---------+
| id | case_id | user_id |
+----+---------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 4 |
| 4 | 3 | 1 |
| 5 | 1 | 4 |
+----+---------+---------+
案例用户表-案例用户
+----+--------+------+
| id | Case | Code |
+----+--------+------+
| 1 | Case 1 | C1 |
| 2 | Case 2 | C2 |
| 3 | Case 3 | C3 |
+----+--------+------+
+----+---------+---------+
| id | case_id | user_id |
+----+---------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 4 |
| 4 | 3 | 1 |
| 5 | 1 | 4 |
+----+---------+---------+
我想查询数据库以返回完整的用户列表,如果用户链接到案例1,则返回是或否,然后返回案例2、案例3等
到目前为止,我得到的SQL(为案例ID 1选择)返回所有用户,但将“否”分配给所有人:
SELECT
users.first,
users.last,
CASE WHEN case_users.case_id IS NULL THEN 'N' ELSE 'Y' END AS 'yes/no'
FROM
users
LEFT OUTER JOIN case_users ON case_users.case_id = 1
我的实际结果是:
+-------+--------+--------+
| First | Last | Yes/No |
+-------+--------+--------+
| Joe | Bloggs | Y |
| John | Doe | Y |
| Jane | Doe | Y |
| Dave | Smith | Y |
+-------+--------+--------+
我期望的结果应该是:
+-------+--------+--------+
| First | Last | Yes/No |
+-------+--------+--------+
| Joe | Bloggs | Y |
| John | Doe | Y |
| Jane | Doe | N |
| Dave | Smith | Y |
+-------+--------+--------+
当我无法获得所需的结果时,有人可以帮助我吗?您缺少从用户到案例用户的连接条件:
SELECT
users.first,
users.last,
CASE WHEN case_users.case_id IS NULL THEN 'N' ELSE 'Y' END AS 'yes/no'
FROM
users
LEFT OUTER JOIN case_users ON users.id = case_users.user_id AND case_users.case_id = 1
您缺少从用户到案例用户的联接条件:
SELECT
users.first,
users.last,
CASE WHEN case_users.case_id IS NULL THEN 'N' ELSE 'Y' END AS 'yes/no'
FROM
users
LEFT OUTER JOIN case_users ON users.id = case_users.user_id AND case_users.case_id = 1
你可以试试这个
SELECT u.first, u.last, IF(cu.case_id,'Y','N') AS CASE_1 FROM users u
LEFT JOIN case_users cu ON u.id = cu.user_id AND cu.case_id = 1
也可以使用IF(cu.case\u id,'Y','N')
条件代替case
你可以试试这个
SELECT u.first, u.last, IF(cu.case_id,'Y','N') AS CASE_1 FROM users u
LEFT JOIN case_users cu ON u.id = cu.user_id AND cu.case_id = 1
可以使用
IF(cu.case\u id,'Y','N')
条件,而不是case
尝试相反的方法,…当case\u users.case\u id不为空时,则使用'Y'ELSE'N'…
在加入表时,通常会表示它们之间的某种关系。要获得进一步的帮助,请参阅:谢谢jarth,我尝试过,它只是将每个人都呈现为N,因此我需要重新思考逻辑,尝试相反的方式,…当case\u users.case\u id不为NULL时,则为“Y”或“N”…
当您加入表时,通常会表示它们之间的某种关系。如需进一步帮助,请参阅:谢谢jarth,我试过了,它把每个人都变成了N,所以我需要重新思考一下逻辑,感谢Chris修复了它会记得,因为我认为案例创建了连接,但感谢你的帮助,我现在理解了逻辑感谢Chris修复了它会记得,因为我认为案例创建了连接,但感谢你的帮助,我现在明白逻辑了吗