擅长:python、mysql、java
<p>首先,使用ANSI联接语法来区分联接条件和过滤条件。结果更易于阅读,并且可以更好地显示数据的结构:</p>
<pre><code>SELECT DISTINCT(percept.*)
FROM
percept
JOIN annotation ON percept.id = annotation.percept_id
JOIN annotation_property ON annotation_property.annotation_id = annotation.id
WHERE
annotation_property.name = 'FOO'
AND annotation_property.value = 'BAR'
;
</code></pre>
<p>如您所说,对主键列使用<code>distinct</code>,而不是一次对整个<code>percept</code>行使用<code>distinct</code>,但这仍然可能涉及到计算一个大的结果集,然后将其合并。它是<code>exists()</code>条件的替代品,而不是对条件的补充。在</p>
<p>在<code>WHERE</code>子句中使用<code>EXISTS</code>条件可能如下所示:</p>
^{pr2}$