sql - MySQL:选择剩余行

标签 sql mysql join

我到处寻找这个问题,但似乎找不到解决方案。也许我使用了错误的术语。不管怎样,我都会向值得信赖的好 friend 求助。帮助我找到答案。

我有两个表,我们将它们称为“工具”和“安装”

tools = id, name, version
installs = id, tool_id, user_id

“工具”表记录可用工具,这些工具随后由用户安装并记录在“安装”表中。选择已安装的工具非常简单:

SELECT tools.name
  FROM tools
  LEFT JOIN installs
  ON tools.id = installs.tool_id
  WHERE user_id = 99 ;

如何选择剩余的工具——用户 #99 尚未安装的工具?

如果这太明显了,我很抱歉,但我似乎无法弄清楚!感谢您的帮助!

最佳答案

用途:

   SELECT t.name
     FROM TOOLS t
LEFT JOIN INSTALLS i ON i.tool_id = t.id
                    AND i.user_id = 99
    WHERE i.id IS NULL

或者,您可以使用NOT EXISTS:

SELECT t.name
  FROM TOOLS t
 WHERE NOT EXISTS(SELECT NULL 
                    FROM INSTALLS i
                   WHERE i.tool_id = t.id
                     AND i.user_id = 99)

...或不在:

SELECT t.name
  FROM TOOLS t
 WHERE t.id NOT IN (SELECT i.tool_id
                      FROM INSTALLS i
                     WHERE i.user_id = 99)

在这三个选项中,LEFT JOIN/IS NULL 在 MySQL 上效率最高。 You can read more about it in this article .

关于sql - MySQL:选择剩余行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2473843/

相关文章:

java - JDBC 使用批处理删除和插入

PHP - 加载图像(图像位于服务器上)并作为 BLOB 插入数据库

sql - MySQL - 复杂查询,包括来自多个表的查找列

sql - 返回 postgresql 中的行数

.net - 中等信任度下进程内数据库的选项

sql - firebase:在 firebase 中实现模式搜索

mysql - 在 MySQL 表中,是相当于在一个列上有两个单独的索引,还是将它们合并?

php - 有没有办法为同一个表组合多个连接?用于 V 4.6 的 WP 元查询

php - 无法检索每条记录的额外查询的值?

sql - 与 SQL 搏斗