我是MySQL的新手(来自FileMaker),为此感到困惑。我必须从符合此定义的MySQL数据库创建一个列表:列出表Children中没有任何相关记录的表Consultations中的所有记录,其中字段Category的内容与first contact不同。因此,该列表应包括未进行任何咨询的儿童以及仅进行过first contact咨询但没有其他咨询的儿童。我的解决方案似乎可以正常工作,但是即使有少量的样本记录,它也非常慢。有没有更简单和/或更快速的方法来做到这一点?我试过了SELECT Chi.ID, Chi.NameFROM Children Chi JOIN Consultations Con ON Con.fk_Child = Chi.IDWHERE NOT EXISTS (SELECT * FROM Consultations WHERE fk_Child = Chi.ID AND Categorie != 'first contact')GROUP BY Chi.ID 最佳答案 您不需要加入咨询表(因此,不需要对结果进行分组),还可以在子查询中省略*:SELECT Chi.ID, Chi.Name FROM Children ChiWHERE NOT EXISTS (SELECT 1 FROM Consultations WHERE fk_Child = Chi.ID AND Categorie != 'first contact')EXISTS语句是进行这种操作最快的语句之一,如果删除JOIN并且GROUP不够快,则必须查看这些表中的索引和数据类型-对于此特定查询-确保是一个ENUM字段(如果可能),并在Categorie上添加索引。关于php - MySQL Select:查找仅具有一种类型的相关记录的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30100134/
10-13 00:54