查询: SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
可以被写成:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
查询: SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2); SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 WHERE table1.id=table2.id);
可以被写成:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL;
shuixin13(犬犬(心帆)) 说的是经典解决方法 , 非常赞同!
to:shuixin13(犬犬(心帆)) ( ) 信誉:286 非常佩服!select * from a where id not in (select a_id from b where b.day>'2004-02-12'); 怎么办呢?
我要重新建立一个表table2,把select a_id from b where b.day>'2004-02-12'的结果insert进去吗?然后再 SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL;
试试这个 select a.* from a left join b on a.id = b.a_id where b.a_id is NULL and b.day>'2004-02-12';
to:seakingx(亚龙湾) ( ) 信誉:101 没有结果!select a.* from a left join b on a.id = b.a_id where b.a_id is NULL and b.day>'2004-02-12';他的意思是要求连接后b表后,b表的a_id为空,又要 day 大于2004-02-12, 我需要:day大于2004-02-12的所有a_id,然后在a表里去掉这些a_id! 由于子查询是2个操作步骤,而连接想通过一步得到结果! 虽然shuixin13(犬犬(心帆)) ( ) 信誉:286 2005-4-29 11:33:07 得分: 0 提供里一个解决思路,但是目前看有时候两步并为一步的捷径是行不通的!要是新建几个表create table select * 语法,看来在实际应用中(我是把我的问题简化了)需要新建2个表,真的效率不高,不过算是好的!只是每次都要建立这两个表!如果用java语言调用取出的方法,需要用到in(id1,id2,id3,……)关键字,我是很不喜欢,因为我的id很多,以后还有暴涨的趋势!mysql 要是有视图改多好!
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
可以被写成:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
查询:
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2
WHERE table1.id=table2.id);
可以被写成:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
非常佩服!select * from a where id not in (select a_id from b where b.day>'2004-02-12');
怎么办呢?
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
select a.* from a left join b on a.id = b.a_id where b.a_id is NULL and b.day>'2004-02-12';
没有结果!select a.* from a left join b on a.id = b.a_id where b.a_id is NULL and b.day>'2004-02-12';他的意思是要求连接后b表后,b表的a_id为空,又要 day 大于2004-02-12,
我需要:day大于2004-02-12的所有a_id,然后在a表里去掉这些a_id!
由于子查询是2个操作步骤,而连接想通过一步得到结果!
虽然shuixin13(犬犬(心帆)) ( ) 信誉:286 2005-4-29 11:33:07 得分: 0
提供里一个解决思路,但是目前看有时候两步并为一步的捷径是行不通的!要是新建几个表create table select * 语法,看来在实际应用中(我是把我的问题简化了)需要新建2个表,真的效率不高,不过算是好的!只是每次都要建立这两个表!如果用java语言调用取出的方法,需要用到in(id1,id2,id3,……)关键字,我是很不喜欢,因为我的id很多,以后还有暴涨的趋势!mysql 要是有视图改多好!
还有password的验证的几个问题!比如:mysql4.1就有一些问题,所以对5.0我一直敬而远之!
更主要的恐怕是由于原来项目用的是4.0的关系,我不知道哪里会出问题!