sql - 使用SQL查找不匹配的记录

标签 sql select

我正在尝试编写一个查询来查找在另一个表中没有匹配记录的记录。

例如,我有两个表,其结构如下所示:

Table1
    State | Product | Distributor | other fields
    CA    | P1      |  A          | xxxx
    OR    | P1      |  A          | xxxx
    OR    | P1      |  B          | xxxx
    OR    | P1      |  X          | xxxx
    WA    | P1      |  X          | xxxx
    VA    | P2      |  A          | xxxx

Table2
    State | Product | Version | other fields
    CA    | P1      |  1.0    | xxxx
    OR    | P1      |  1.5    | xxxx
    WA    | P1      |  1.0    | xxxx
    VA    | P2      |  1.2    | xxxx

(州/产品/经销商共同构成表 1 的键。州/产品是表 2 的键)

我想查找所有不使用分销商 X 的州/产品/版本组合。(因此本示例中的结果是 CA-P1-1.0 和 VA-P2-1.2。)

对于执行此操作的查询有什么建议吗?

最佳答案

SELECT
    *
FROM
    Table2 T2
WHERE
    NOT EXISTS (SELECT *
        FROM
           Table1 T1
        WHERE
           T1.State = T2.State AND
           T1.Product = T2.Product AND
           T1.Distributor = 'X')

这应该符合 ANSI 标准。

关于sql - 使用SQL查找不匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/508509/

相关文章:

mysql 同一字段中的多个计数和组值

mysql - 为什么 mysql 没有为 float 的 varchar 返回正确的顺序?

cakephp - 为什么选择菜单中的第一项总是空的?

mysql - 如何正确连接 MYSQL 中可能没有匹配结果的列?

mysql - 匹配 MYSQL IN() 中传递的每个变量

sql - Oracle where条件优先

sql - DB2 SQL 脚本 : how to start a transaction and rollback on error

mysql - 将函数绑定(bind)到 MySQL 中的列

javascript - 通过 jQuery cookie 脚本删除 cookie

javascript - jQuery 在下一个选择框中隐藏选定的选项