繁体   English   中英

在MySQL中使用AND OR不会返回任何结果

[英]Using AND OR in MySQL not returning any results

我正在尝试查询MySQL数据库中的表。

因此,基本上,我需要根据表中列的值进行查询。 所以:

如果列A =值,并且thisID在值数组中

或列A <值,且此ID在值数组中

但是查询返回空值,但是数据在数据库中。

编辑:桌子上的一点背景和我正在尝试做的事情。

界面中的用户将选择一个业务区域。 该业务区域可以有许多子区域(部门等),并且在那些区域内,可以为每个部门分配许多用户。 因此,我在此查询中传递了一系列用户和区域。

如果分配的类型为3,则将条目分配给用户,因此我要检查user(ID)是否在数组中,以便: r.assigned_type = 3 AND r.assigned_id IN(26102,26132,26133,26134,44749)

如果分配类型为1或2,但小于3,则将条目分配给一个区域(站点/部门)。 所以我想检查一下area(ID)是否在数组中,所以: r.assigned_type < 3 AND r.assigned_id IN(10901,10937,10938,10939,10940,10941)

有时可能同时存在用户和部门的条目,这就是为什么我需要使用OR来检查分配的用户和区域的原因

我使用的语法正确吗? 我没有任何语法错误吗?

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name`
FROM `risk_assessments` `r`
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`
WHERE `r`.`org_id` = 78
AND `r`.`risk_type_id` = 10
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= 7 
AND ((`r`.`assigned_type` = '3' AND `r`.`assigned_id` IN(26102,26132,26133,26134,44749))
OR (`r`.`assigned_type` < '3' AND `r`.`assigned_id` IN(10901,10937,10938,10939,10940,10941)))  

请检查您的加入条件:

LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`

这似乎是错误的,因为两个表都使用相同的r连接。 assigned_id外键。

应该是这样的:

LEFT JOIN `users` `u` ON `u`.`id` = `r`.`user_id` (foreign key for users table)
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`area_id` (foreign key for areas table)

只需在查询中进行简单的条件更改即可按照给定的示例获得结果。

这是更新的查询:

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name`
FROM `risk_assessments` `r`
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`
WHERE `r`.`org_id` = 78
AND `r`.`risk_type_id` = 10
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= 7 
AND `r`.`assigned_type` <= '3' 
AND `r`.`assigned_id` IN(10901,10937,10938,10939,10940,10941,26102,26132,26133,26134,44749)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM