有没有一种方法可以根据可以等于多个值的列的值从sql表中检索数据?

时间:2020-09-11 15:51:53

标签: php mysql sql mariadb

我有一个SQL表,其中包含有关项目的一些信息,并且大致类似于下表。在此表中,一个项目可能具有多个实例,因为它具有多个任务。每个任务都会有一个状态,并且每个状态都有一个与之相关的ID。如何编写查询以获取状态为打开,关闭,开票或已取消的项目1的所有实例?即使没有状态为已取消的项目一的实例?

PROJECT NAME|PROJECT ID|TASK|STATUS|status_code    
project_1        1       seo  open   5
project_1        1       blog closed 0 
project_1        1       data billed 2 
project_2        2       seo  open   5
project_3        3       seo  open   5
project_4        4       seo  open   5
project_5        5       seo  open   5

注意:每个状态都与一个状态ID相关

0 = closed 
1 = cancelled 
2 = billed 
3 = paid 
4 = on hold 
5 = open 
6 = pending 

截至目前,我的查询看起来像

"SELECT * FROM Table WHERE project_id = 1 AND Status_Code = (0 OR 1 OR 2 OR 3 OR 4 OR 5 OR 6)"

尽管表中存在status_code = 2 0&5的多个实例,但此操作不会返回

如果我将查询更改为

SELECT * FROM table WHERE project_id = 1 AND status_code = 2

我确实获得了状态码2的所有实例,但是我需要能够检查所有这些实例,并可能查询一个不存在的实例。

2 个答案:

答案 0 :(得分:2)

尝试一下

SELECT * FROM Table 
WHERE project_id = 1 AND Status_Code IN( 1, 2, 3, 4, 5, 6)

此外,您可能希望过滤出重复项,所以

SELECT DISTINCT [PROJECT NAME], [PROJECT ID]
FROM Table 
WHERE project_id = 1 AND Status_Code IN( 1, 2, 3, 4, 5, 6)

答案 1 :(得分:0)

首先,如果这是一个任务表,为什么没有任务ID?

如果我理解疑问权,那么GROUP BYDISTINCT

SELECT project_id, task, status FROM Table WHERE project_id = 1 AND Status_Code IN (0,1,2,3,4,5,6)
GROUP BY
project_id, task, status

将返回所有3列的每个不同值 uainv不带group by的不同,将返回相同的