我正在使用一个查询,在其中我加入两个表,然后目标只保留特别感兴趣的行。一个这样的条件是仅选择在特定列中具有重复值的行。
对于这种情况,数据和值是任意的。 Team1和Team2包含团队名称值,例如“Team Red”,“Team Blue”,......等等
SELECT date, team1, team2, value
FROM database.team_table
INNER JOIN database.teaminfo_table ON database.team_table
WHERE
date >= sysdate --example condition
AND
--condition to only take in the specified rows
我怀疑这是否是一种有效的方式来实现我想做的事情。我想知道表达这种情况的正确方法是什么,以及是否有更好的方法来实现它。
预期的结果是,如果,对于A组列,如果有两个名为“Team Red”的条目,并且列中没有更多此类重复项。最终结果应该是两行,每一行的团队A值为Team Red。
对每个行评估WHERE子句。
如果在结果集中保留行的标准是在同一个表中存在满足某些特性的另一行,则要使用的WHERE子句是
WHERE EXISTS ...
所以你会得到
SELECT ... FROM TEAM_TABLE AS OUTER WHERE EXISTS (
SELECT 1 FROM TEAM_TABLE INNER WHERE INNER.whatever < / = / > OUTER.whatever
)
还要记住在内部SELECT中包含必要的WHERE子句,以确保只有与OUTER行不同的行才能满足条件。
EG
AND OUTER.<primary key here> <> INNER.<primary key here>
要么
AND OUTER.ROWID() <> INNER.ROWID()
如果您使用的是具有这些ROWID()内容的DBMS(如果您使用它,通常会稍微好一些)。