1

我正在尝试编写一个可以获取无效 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)

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

4

3 回答 3

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

于 2013-08-18T17:12:20.610 回答
0
SELECT * FROM members WHERE refby not in  (SELECT id FROM members)

这应该可以解决您的问题

于 2013-08-18T16:52:48.430 回答
0

您可以使用以下方法尝试not in:-

SELECT * FROM tbl.members WHERE refby not in  (SELECT id FROM members)
于 2013-08-18T16:53:39.877 回答