簡體   English   中英

我如何“加入”但在 MySQL 的表中保持獨立?

[英]How do I 'join' but keep things separate in tables in MySQL?

我有兩張桌子。 表員工:

EmployeeID (employees)  LastName (employees)    FirstName (employees)
1                       Davolio                 Nancy

和表訂單:

OrderID (orders)    CustomerID (orders) EmployeeID (orders)
10248               90                  5
10278               45                  1
10238               47                  1

我編輯了完整列表,因為它有數百行。

在Employees表中,EmployeeID可以唯一標識一個員工,在Employee表中不會重復。 然而,在表 'Order' 中,employeeID 可以重復多次,因為一個員工可以出售許多訂單的幫助。

無論如何,我可以在這里看到,在 Orders 表中,employeeID 會重復多次,這意味着我需要在 MySQL 代碼的某處使用 COUNT(EmployeeID)>=2。

這就是我想要的:

EmployeeID              Number of Orders
1                       2

如您所見,EmployeeID 在“訂單”表中出現了兩次。 所以他賣了 2 件商品,它鏈接到他的 1 個員工 ID。

所以這就是我嘗試過的:

SELECT EmployeeID, COUNT(EmployeeID) FROM
employees A inner join 
orders B
ON (A.EmployeeID=B.EmployeeID)
WHERE COUNT(B.EmployeeID >=2)

這是輸出:

錯誤:字段列表中的“EmployeeID”列不明確 — 錯誤代碼 1052

我不確定在這種情況下如何得到這個結果。

您希望構建屬於同一員工的訂單組,然后根據每個組的行數進行篩選。 為此,您可以使用group byhaving

select employeeid, count(*) cnt_orders
from employees e 
inner join orders o using(employeeid)
group by employeeid
having count(*) >= 2

請注意,此處不需要連接。 你可以直接從訂單表中得到你想要的結果:

select employeeid, count(*) cnt_orders
from orders 
group by employeeid
having count(*) >= 2

不需要加入employees表,可以從orders獲取employee ID。 僅當您還需要employee表中的其他信息(例如他們的姓名)時才需要加入。

您需要GROUP BY employeeID來獲取每個員工的計數。

>= 2不應該在COUNT()函數內,您要比較結果。

您需要使用HAVING而不是WHERE WHERE用於聚合選擇要處理的行。

您應該使用COUNT(*)而不是COUNT(columnName)除非您需要從計數中排除列的空值。

如果為COUNT(*)結果提供別名,則可以在HAVING子句中使用該別名,而不是重新聲明函數。

SELECT EmployeeID, COUNT(*) AS number_of_orders
FROM orders B
GROUP BY EmployeeID
HAVING number_of_orders >= 2

關於模糊列的錯誤的原因是因為兩個表都有EmployeeID列。 SELECT列表中,您需要指定A.EmployeeIDB.EmployeeID ,就像您在ON子句中所做的那樣。

暫無
暫無

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

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