我有两个表,TABLE_A和TABLE_B。这就是我想要做的事情:在TABLE_A中获取FIELD_2的所有唯一出现,以及每个出现最高的FIELD_1。然后,只选择我在那里的FIELD_1的那些,其中TABLE_B中的相应FIELD_3不是' OK'。 (FIELD_1存在于TABLE_A和TABLE_B中。)
首先,我开始采用简单的方法,我按照上述步骤分三步完成。 (要看看我做了什么,最简单的方法是从第1步开始,然后向外工作,这就是我编写代码的方式):
/* START Step 3 – Take only those of the highest FIELD_1 from TABLE_A, where the corresponding FIELD_3 in TABLE_B is not ‘OK’ */
SELECT DISTINCT
FIELD_1
FROM
TABLE_B
WHERE
FIELD_1 IN
(
/* START Step 2 – Take only the highest FIELD_1 from Step 1 */
SELECT
MAXFIELD_1
FROM
(
/* START Step 1 – Take the highest FIELD_1 for all of the FIELD_2 which are in TABLE_A */
SELECT
FIELD_2,
MAX(FIELD_1) MAXFIELD_1
FROM
TABLE_A
GROUP BY
FIELD_2
/* END Step 1 */
)
/* END Step 2 */
)
AND
FIELD_3 <> 'OK'
/* END Step 3 */
但是,当我继续我想要做的事情时,这会变得更加丑陋和丑陋,我正在寻找一种通过使用JOIN语句来缩短它的方法。起初我试过这个:
SELECT
A.FIELD_2,
MAX(A.FIELD_1) FIELD_1
FROM
TABLE_A A
INNER JOIN TABLE_B B ON A.FIELD_1 = B.FIELD_1
WHERE
B.FIELD_3 <> 'OK'
GROUP BY
A.FIELD_2
不幸的是,现在似乎发生的是MAX(A.FIELD_1)返回TABLE_A中最高的FIELD_1,其中相应的FIELD_3&lt;&gt; &#39;确定&#39 ;.换句话说,首先应用where语句,然后然后选择最高的FIELD_1。我需要先选择A.FIELD_2和MAX(A.FIELD_1),然后选择 ,只选择B.FIELD_3&lt;&gt;的那些事件。 &#39; OK&#39;
我该怎么做?
答案 0 :(得分:0)
我不明白你在哪里应用了你的第一个要求:
在TABLE_A
中获取FIELD_2的所有唯一匹配项
我希望您的查询中会看到DISTINCT
个关键字。
尽管如此,如果您想在获取字段B.FIELD_3 <> 'OK'
和A.FIELD_2
后过滤MAX(A.FIELD_1)
,则可以使用HAVING
子句。
SELECT
A.FIELD_2,
MAX(A.FIELD_1) FIELD_1,
B.FIELD_3,
FROM
TABLE_A A
INNER JOIN TABLE_B B ON A.FIELD_1 = B.FIELD_1
GROUP BY
A.FIELD_2
HAVING
FIELD_3 <> 'OK'