Mysql 查询以查找定义的 file_type 及其项目类型和父 ID 的记录

标签 mysql

我在MySQL数据库中有一张表,其结构有点像

id |parent_id| project_id | name | file_type
-------------------------------------------
1  |  NULL   |    p1      | abc1  |    f1
2  |  NULL   |    p1      | abc2  |    f2
3  |  1      |    p1      | abc3  |    f2
4  |  NULL   |    p2      | abc4  |    f1
5  |  1      |    p1      | abc5  |    f3
6  |  NULL   |    p2      | abc6  |    f3
7  |  4      |    p2      | abc7  |    f1
8  |  NULL   |    p1      | abc8  |    f2
9  |  7      |    p2      | abc9  |    f1

我正在尝试获取所有 parent_id 必须为 NULL 且 project_id 必须为“p1”且 file_type 可以为“f1”的记录' 或 'f2'

根据我目前的进度,这个查询对我有用

SELECT * FROM testtable WHERE (project_id = 'p1' AND parent_id Is NULL AND file_type='f1') OR (project_id = 'p1' AND parent_id Is NULL AND file_type='f2');

有没有更好的方法来获取所需的记录,比如使用连接? 高性能的方法是可取的。

此外,因为我正在使用 file_type 来过滤记录。

So adding an index on file_type column will be good or not?

该列的数据类型为 Varchar(50)

最佳答案

你可以试试这个(绝对不需要使用连接):

SELECT * FROM testtable 
WHERE project_id = 'p1' AND parent_id Is NULL AND file_type IN ('f1','f2') ;

关于Mysql 查询以查找定义的 file_type 及其项目类型和父 ID 的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069607/

相关文章:

mysql - 将mysql中的单个表设为只读

mysql - CentOS下无法启动MySQL

mysql - web2py是否支持在数据库中创建触发器

javascript - 从 MySQL 数据库更新 Google map 上标记 "Live"的更改坐标

php - 如何修复 PDO 中无效的参数号

c# - 在从池中获取连接之前经过的超时时间

MySQL,如果存在匹配则显示列的值,否则保留为空

python - Flask查询打印所有记录表

php - 如何从 MySQL 查询(多级数组)中获取变量?

php - 使用 fetchColumn 显示记录数