【问题标题】:MySQL except clause doesnt workMySQL except 子句不起作用
【发布时间】:2015-06-19 07:09:59
【问题描述】:

给定客户表和贷款表,我希望找到没有贷款的客户。架构定义如下:

mysql> select  * from customer;
+---------------+-----------------+---------------+
| customer_name | customer_street | customer_city |
+---------------+-----------------+---------------+
| Adams         | Spring          | Pittsfield    |
| Brooks        | Senator         | Brooklyn      |
| Curry         | North           | Rye           |
| Glenn         | Sand Hill       | Woodside      |
| Green         | Walnut          | Stamford      |
| Hayes         | Main            | Harrison      |
| Johnson       | Alma            | Palo Alto     |
| Jones         | Main            | Harrison      |
| Lindsay       | Park            | Pittsfield    |
| Smith         | North           | Rye           |
| Turner        | Putnam          | Stamford      |
| Williams      | Nassau          | Princeton     |
+---------------+-----------------+---------------+
12 rows in set (0.00 sec)

mysql> select  * from borrower;
+---------------+---------+
| customer_name | loan_id |
+---------------+---------+
| Adams         | L16     |
| Curry         | L93     |
| Hayes         | L15     |
| Jackson       | L14     |
| Jones         | L17     |
| Smith         | L11     |
| Smith         | L23     |
| Williams      | L17     |
| Adams         | L19     |
| Adams         | L15     |
| Jones         | L15     |
| Williams      | L23     |
+---------------+---------+
12 rows in set (0.00 sec)

现在,我尝试了查询:select customer_name from customer except select customer_name from borrower;

但我得到了错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select customer_name from borrower' at line 1

我也尝试了difference,但弹出了同样的错误。但是union 效果很好。

mysql> select  customer_name from customer union select customer_name from borrower;
+---------------+
| customer_name |
+---------------+
| Adams         |
| Brooks        |
| Curry         |
| Glenn         |
| Green         |
| Hayes         |
| Johnson       |
| Jones         |
| Lindsay       |
| Smith         |
| Turner        |
| Williams      |
| Jackson       |
+---------------+
13 rows in set (0.00 sec)

有什么我可能错的建议吗?

【问题讨论】:

标签: mysql except


【解决方案1】:

你可以试试:

select customer_name from customer where customer_name not in (select customer_name from borrower);

所以你从没有贷款的客户中选择 customer_name。

我还没有检查,但也许是更简单的方法。

【讨论】:

  • 我认为 OP 在问为什么他的 EXCEPTDIFFERENCE 实现不起作用。
【解决方案2】:

除了和差异关键字在mysql中不起作用。

即使是庞大的表格,下面的查询也可以更快地为您提供结果。

SELECT cust.customer_name 
FROM customer cust 
LEFT JOIN borrower brw ON brw.customer_name=cust.customer_name 
WHERE brw.customer_name IS NULL;

注意:两个表中都应该有 cust_id 来连接数据,而不是 customer_name 并且应该被索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多