【问题标题】:SQL query SELECT FROM 2 tables - equals returns correct results, but need not equalsSQL 查询 SELECT FROM 2 个表 - 等于返回正确的结果,但不需要等于
【发布时间】:2012-04-19 06:32:48
【问题描述】:

基本上,我想从 customers 表中获取所有未出现在 brochure_requests 表中的行。

SELECT *      
  FROM customers  JOIN  brochure_requests
    WHERE brochure_requests.first_name != customers.customer_first_name
    AND brochure_requests.last_name != customers.customer_last_name

当参数为 = 时查询有效,但只要我运行 != 查询,程序 (HeidiSQL) 就会无限期挂起或直到我取消它。

【问题讨论】:

    标签: sql select where


    【解决方案1】:

    您在 brochure_requests 表中没有 customerID 吗?

    如果你这样做,你可以这样做:

    select * from customers 
    where customerId not in (select customerId from brochure_requests)
    

    【讨论】:

    • 不,这些表根本不相关,很烦人:(它们完全相互独立,但包含许多相同的数据。谢谢
    • 因此将客户 ID 更改为客户名称。你会得到同样的结果。
    • 如果数据是独立输入的,您可能会发现客户 John Smith-Jones 的宣传册请求为 John Smith Jones,并且在您的结果集中出现错误。
    • KyleNZ - 不幸的是我无权修改数据库,否则我会立即链接这些表!我只能把数据拿出来。迭戈 - 谢谢,你说的有效:)
    【解决方案2】:

    使用NOT EXISTS,例如

    SELECT *      
    FROM customers 
    WHERE NOT EXISTS (
        SELECT 1
        FROM   brochure_requests
        WHERE  brochure_requests.first_name = customers.customer_first_name
        AND    brochure_requests.last_name = customers.customer_last_name)
    

    我还建议在 brochure_requests.first_name 和 brochure_requests.last_name 字段上添加索引以提高性能。

    【讨论】:

    • 谢谢 - 这正是我想要的!
    【解决方案3】:
    SELECT 
        *
    FROM 
        customers  
        LEFT JOIN brochure_requests
            ON brochure_requests.first_name = customers.customer_first_name
            AND brochure_requests.last_name = customers.customer_last_name
    
    WHERE 
        brochure_requests.first_name IS NULL
    

    另外,考虑通过将 CustomerID 作为外键添加到 brochure_requests 来规范化您的数据库,而不是重复名字和姓氏。

    【讨论】:

    • +1 添加 CustomerID 字段甚至比索引名称字段更好。
    • 谢谢 - 这不是我想要的,但它仍然很有帮助。
    • 出于好奇,它有什么不足之处?更改为 SELECT customers.* ... 应该会产生与接受的答案相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多