簡體   English   中英

MySQL的except子句不起作用

[英]MySQL except clause doesnt work

給定客戶表和貸款表,我希望找到沒有貸款的客戶。 模式定義如下:

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)

有什么建議我可能錯了嗎?

你能試一下嗎:

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

因此,您可以從尚未貸款的客戶中選擇customer_name。

我沒有檢查,但也許是更簡單的方法。

除了和difference關鍵字在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並應建立索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM