select one
from test a left join test b
  on a.one = b.one
where b.two is null;
没试过,不知对不对.

解决方案 »

  1.   

    select one
    from test a left join test b
      on a.one = b.two
    where b.one is null;
    测试过,没有问题.
      

  2.   

    mysql自身还真不好实现,或许你需要借助点成语言进行两次查询,如:String condition = "";
    boolean firstFlag = false;
    query = "select distinct two from test";
    rs    = stmt.executeQuery(query);
    while(rs.next()){
    if(firstFlag) {
    condition = condition + "," + rs.getString(two);
    }
    else {
    firstFlag = true;
    condition = rs.getString(two);
    }
    }query = "select * from test where one not in(" + condition + ")";
    rs    = stmt.executeQuery(query);
    while(rs.next()){
    System.out.println(rs.getString("one") + " " + rs.getString("two"));
    }
      

  3.   

    试试EXCEPTselect one from test except select two from test;
      

  4.   

    想到了两个方法:
    1、用left join实现mysql> select * from test;
    +-----+-----+
    | one | two |
    +-----+-----+
    | 1   | 2   |
    | 2   | 3   |
    | 4   | 1   |
    | 5   | 0   |
    | 6   | 4   |
    +-----+-----+
    5 rows in set (0.00 sec)mysql> select a.*
        -> from test a left join test b
        ->   on a.one = b.two
        ->   left join test c on a.two=c.one
        -> where b.one is null and c.two is null;
    +-----+-----+
    | one | two |
    +-----+-----+
    | 5   | 0   |
    +-----+-----+
    1 row in set (0.00 sec)2、用临时表实现mysql> select * from test;
    +-----+-----+
    | one | two |
    +-----+-----+
    | 1   | 2   |
    | 2   | 3   |
    | 4   | 1   |
    | 5   | 0   |
    | 6   | 4   |
    +-----+-----+
    5 rows in set (0.00 sec)mysql> create temporary table tmp select * from test;
    Query OK, 5 rows affected (0.06 sec)
    Records: 5  Duplicates: 0  Warnings: 0mysql> select * from tmp;
    +-----+-----+
    | one | two |
    +-----+-----+
    | 1   | 2   |
    | 2   | 3   |
    | 4   | 1   |
    | 5   | 0   |
    | 6   | 4   |
    +-----+-----+
    5 rows in set (0.00 sec)mysql>  update tmp a,test b set a.one='delete' where a.one=b.two;
    Query OK, 3 rows affected (0.00 sec)
    Rows matched: 3  Changed: 3  Warnings: 0mysql> select * from tmp;
    +--------+-----+
    | one    | two |
    +--------+-----+
    | delete | 2   |
    | delete | 3   |
    | delete | 1   |
    | 5      | 0   |
    | 6      | 4   |
    +--------+-----+
    5 rows in set (0.02 sec)mysql> update tmp a,test b set a.one='delete' where a.two=b.one;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 3  Changed: 1  Warnings: 0mysql> select * from tmp;
    +--------+-----+
    | one    | two |
    +--------+-----+
    | delete | 2   |
    | delete | 3   |
    | delete | 1   |
    | 5      | 0   |
    | delete | 4   |
    +--------+-----+
    5 rows in set (0.00 sec)mysql> delete from tmp where one='delete';
    Query OK, 4 rows affected (0.00 sec)mysql> select * from tmp;
    +-----+-----+
    | one | two |
    +-----+-----+
    | 5   | 0   |
    +-----+-----+
    1 row in set (0.00 sec)