我不知道什么是实际问题,但我的问题在下面给出::
我有一个像这样的MySQL表table_name
:
+----+--------+-------+
| id | name | f_key |
+----+--------+--------
| 1 | abcd | 0 |
| 2 | efgh | 0 |
| 3 | ijkl | 0 |
| 4 | mnop | 2 |
+----+--------+-------+
id
是主键& f_key
是外键[对同一表中id的引用]。
SELECT * FROM table_name WHERE id NOT IN (SELECT f_key FROM table_name WHERE f_key !=0);
是否还有其他好的(最短执行时间)MySQL查询来获取这样的输出:
+----+--------+-------+
| id | name | f_key |
+----+--------+--------
| 1 | abcd | 0 |
| 3 | ijkl | 0 |
| 4 | mnop | 2 |
+----+--------+-------+
编辑::
尝试查询子查询的中等大小结果,但问题是:
EXISTS 高速执行 IN :子查询结果时 非常大。
IN 超越 EXISTS :子查询结果非常小。
答案 0 :(得分:0)
在运营商中经常表现不佳。我认为你应该尝试存在
SELECT * FROM table_name a WHERE NOT Exists(SELECT f_key FROM table_name b WHERE b.f_key = a.id);
如果您可以在f_key中创建索引,则此查询将执行更好的
答案 1 :(得分:0)
使用Return row only if value doesn't exist的常规惯用法,但使用自我加入:
SELECT a.*
FROM table_name AS a
LEFT JOIN table_name AS b ON a.id = b.f_key
WHERE b.id IS NULL
答案 2 :(得分:0)