0
我对MySQL(来自FileMaker)非常陌生,并且很努力。我必须从满足该定义的MySQL数据库创建一个列表:列出表Children
中没有任何相关记录的表Consultations
中的所有记录,其中字段Category
的内容不同于first contact
。MySQL Select:查找只有一种类型的相关记录的记录
所以列表中应该包括没有任何咨询的孩子以及那些只有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
所有其他RDBMSs都是如此。对于MySQL来说并非如此 - 至少在历史上是这样的:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/ – Strawberry
Now这确实更简单了,谢谢你的帮助! – Nico
@Strawberry谢谢你的评论。据我所知在最近的mySQL版本中性能要好得多,我会试着找到我读的基准和文章,因为我相信EXISTS查询现在比LEFT JOINS更快。 – vakata