使用update语句过滤sql行

时间:2013-08-18 16:50:58

标签: mysql

我正在尝试编写一个可以获得无效refby的查询(与id相关),请检查以下数据库结构......

| id | acnumber  | refby |
+----+-----------+--------+
|  1 | ac01      | 2      |
+----+-----------+--------+
|  2 | ac02      | 1      |
+----+-----------+--------+
|  3 | ac03      | 5      |
+----+-----------+--------+

正如您所发现的,上表中没有值为5的id,因此查询必须返回第3行。

我试过......

SELECT * FROM tbl.members WHERE refby != (SELECT id FROM tbl.members WHERE id = refby)

但是这没有给出正确的结果,请帮助,谢谢。

3 个答案:

答案 0 :(得分:0)

SELECT * FROM members WHERE refby not in  (SELECT id FROM members)

这应该可以解决您的问题

答案 1 :(得分:0)

您可以使用not in尝试此操作: -

SELECT * FROM tbl.members WHERE refby not in  (SELECT id FROM members)

答案 2 :(得分:0)

这应该是LEFT JOIN,NOT IN在大型表上很慢...假设id和refid是PRIMARY KEY或UNIQUE键(在数据集中读取唯一),那么此查询应该返回相同的结果。

SELECT
 *
FROM 
 members members1 
LEFT JOIN
 members members2
ON members1.id = members2.refby 
WHERE members2.id IS NULL

检查sqlfriddle http://sqlfiddle.com/#!2/05731/1