我对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
答案 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
上添加索引。