mysql - 什么 SQL JOIN 用于跨表获取唯一值?

标签 mysql sql join

假设我有 2 个表 T1 和 T2。我需要表 T1 中不存在于表 T2 中的所有值。该 SQL 会是什么样子?

T1:         T2:
T1.ID       T2.ID   
T1.Value    T2.T1ID 
T1.Date     T2.Value

最佳答案

I need all values from table T1 that does not exist in table T2. How would that SQL look like?

您的意思是您需要每个 T1.Value 都不匹配任何 T2.Value

如果是这样,你可以使用这样的东西:

SELECT * FROM T1
WHERE Value NOT IN (SELECT Value FROM T2)

但是,MySQL 可能不太擅长为执行此查询找到最佳计划,因此如果您的测量 显示性能问题,请尝试如下操作:

SELECT DISTINCT T1.*
FROM T1 LEFT JOIN T2 ON T1.Value = T2.Value
WHERE T2.ID IS NULL

请注意 DISTINCT 子句,它确保 T1 行不会被 JOIN“相乘”。

甚至像这样,如果您关心T1.Value:

SELECT DISTINCT T1.Value
...

关于mysql - 什么 SQL JOIN 用于跨表获取唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047821/

相关文章:

sql - 左外连接不起作用?

php - 通过 IP 显示国家标志

mysql - 最佳实践 - 在本地 mysql 服务器/RDS 上开发?

PHP "Session_regenerate_id"和用户身份验证

sql - 在 Sql 查询中使用单元格中的日期或命名范围

指定列上的 SQL 内连接

php - 错误 "Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0"

mysql - HAVING 是按行还是按组运行?

mysql - SQL 将库存盘点表连接到日期表

mysql - 使用 DISTINCT 优化 mysql 查询 Suppliers <-> Products <-> Categories