MySQL选择:查找只有一种类型的相关记录的记录

时间:2015-05-07 11:45:02

标签: php mysql

我对MySQL(来自FileMaker)很陌生,并为此付出了努力。我必须从满足此定义的MySQL数据库创建一个列表:列出表Children中表Consultations中没有任何相关记录的所有记录,其中字段Category的内容是与first contact不同。

因此,该名单应该包括没有任何咨询的儿童以及只有first contact咨询但没有其他任何内容的儿童。

我的解决方案似乎有效但即使只有一小组样本记录也很慢。有更简单和/或更快的方法吗?

我试过

SELECT
   Chi.ID, Chi.Name
FROM
   Children Chi JOIN Consultations Con ON Con.fk_Child = Chi.ID
WHERE
   NOT EXISTS (SELECT * FROM Consultations WHERE fk_Child = Chi.ID AND Categorie != 'first contact') 
GROUP BY
   Chi.ID

1 个答案:

答案 0 :(得分:1)

您不需要加入咨询表(因此 - 无需对结果进行分组),您也可以省略子查询中的width

*

EXISTS语句是此类操作中最快的语句之一,如果删除JOIN并且GROUP还不够快,则必须查看这些表中的索引和数据类型 - 对于此特定查询 - make如果可能,请确保SELECT Chi.ID, Chi.Name FROM Children Chi WHERE NOT EXISTS (SELECT 1 FROM Consultations WHERE fk_Child = Chi.ID AND Categorie != 'first contact') 是ENUM字段,并在Categorie上添加索引。