sql排除某些结果

时间:2016-12-29 00:41:05

标签: sql

假设我有一个数据集

A   B  
--  --
a   1  
b   1  
c   1  
d   2  
e   1  
f   2  
g   1

如果列B的列A中的相同值的值为1和2,我将如何排除B列中的结果为1?

我希望我的结果看起来像这样

   def generate_token
     self.password_token = SecureRandom.hex
     self.save
   end

3 个答案:

答案 0 :(得分:0)

在此明确检查值1和2,并使用其中恰好有两个的事实。如果可以安全地假设您总是想要最高价值,那么您可能会减少这种麻烦。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 
ERROR DATE: Kindly check Weld Date or NDE Date...

at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(Unknown Source)
at dao.EmployeeTmsDao.updateJointNoStatus(EmployeeTmsDao.java:76)
  1. 计算出包含1和2的所有A值。
  2. 将这些与A值上的表匹配。
  3. 如果A在子查询中,请使用B = 2记录。如果不是,请使用B = 1记录。

答案 1 :(得分:0)

对于示例数据和所需结果,实现结果的最简单查询是GROUP BY操作和聚合函数。

  SELECT d.A
       , MAX(d.B) AS B
    FROM my_data_set d
   GROUP BY d.A
   ORDER BY d.A

如果我们只对列12B的行感兴趣,我们可以添加WHERE子句

  SELECT d.A
       , MAX(d.B) AS B
    FROM my_data_set d
   WHERE d.B IN (1,2)
   GROUP BY d.A
   ORDER BY d.A

使用示例数据,输出相同。

这两个语句都达到了指定的结果。 (A中的每个不同值只返回单个行。)

或者,对于相同的示例数据,我们可以使用更为文字的规范实现返回相同的结果集。

如果对于1的相同值,2行有A行时,要排除NOT EXISTS行,我们可以使用 SELECT d.A , d.B FROM my_data_set d WHERE ( d.B = 2 ) OR ( d.B = 1 AND NOT EXISTS ( SELECT 1 FROM my_data_set e WHERE e.A = d.A AND e.B = 2 ) ) ORDER BY d.A, d.B 谓词和相关子查询。< / p>

latest_assembly_versions

答案 2 :(得分:0)

{{1}}