你试试 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 )
你这条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
这样效率比较低 select * from dir_list where dir_list.id not in (select dir_allot.dir_id from dir_alllot where user_id=$user_id)
mysql不能用子查询?不会吧?我没用过mysql,但我只是知道mysql用不了储存过程
MYSQL中没有IN子句,所以还是出错.
SELECT dir_list.* FROM dir_list LEFT JOIN dir_allot ON dir_list.id<>dir_allot.dir_id where dir_allot.user_id='49'这条怎样,分析一下.
试试手册上的这个写法: 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。
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我是这样解决的,这条语句是动态生成的.
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 )
因为你只是要选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
select * from dir_list where dir_list.id not in (select dir_allot.dir_id from dir_alllot where user_id=$user_id)
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。