我在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/