也就是说: 
两个表,dir_allot中的记录是dir_list中的一部分,我想得到没有的这一部分.

解决方案 »

  1.   

    你试试
    select * from dir_list where NOT EXISTS (select * from dir_alllot where dir_list.id=dir_allot.dir_id and dir_allot.user_id=$selid )
      

  2.   

    你这条sql应该会得出一大堆记录
    因为你只是要选dir_list中的记录,但你却将两张表全连接,不等于的条件是非常容易满足的,比如
    dir_list         dir_allot
    id dir            dir_id user_id
    1  aa              1       2
    2  bb              2       2
    3  cc              4       2全连接的结果就是有3×3=9条记录
    然后排除id=dir_id的两条记录,你就会得到7条记录
    比如
    1 aa 2 2
    1 aa 4 2
    而这两条记录都是你不想得到的
    select dir_list.* from dir_list,dir_allot where dir_list.id<>dir_allot.dir_id and dir_allot.user_id=$selid 
      

  3.   

    原理我也懂,他会用表一中的第一条记录和表二中的第一条记录比较,再用表一中的第二条记录和第二表中的下一条记录比较,直到完成,所以会出现很多记录.我现在是在MYSQL中,不是MSSQL,MYSQL中好像不可以用SELECT嵌套,还有其他的办法吗?
      

  4.   

    这样效率比较低
    select * from dir_list where dir_list.id not in (select dir_allot.dir_id from dir_alllot where user_id=$user_id)
      

  5.   

    mysql不能用子查询?不会吧?我没用过mysql,但我只是知道mysql用不了储存过程
      

  6.   

    MYSQL中没有IN子句,所以还是出错.
      

  7.   

    SELECT dir_list.* FROM dir_list LEFT JOIN dir_allot ON dir_list.id<>dir_allot.dir_id where dir_allot.user_id='49'这条怎样,分析一下.
      

  8.   

    试试手册上的这个写法:
    mysql> select table1.* from table1
               LEFT JOIN table2 ON table1.id=table2.id
               where table2.id is NULL;这个例子找出在table1中所有的行,其id值在table2中不存在(即,所有table1中的在table2中没有对应行的行)。当然这假定table2.id被声明为NOT NULL。
      

  9.   

    SELECT dir_list.* FROM dir_list,dir_allot where dir_list.id <> 4 and dir_list.id <> 11 and dir_list.id <> 5 and user_id=49 group by dir_list.id我是这样解决的,这条语句是动态生成的.