簡體   English   中英

LEFT JOIN 未顯示左側表的所有行

[英]LEFT JOIN not showing all rows for table on the left

考慮這個查詢:

SELECT s.*, COUNT( ssh_logs.id ) AS ssh_count FROM servers s 
LEFT JOIN logs ssh_logs ON s.ip_address = ssh_logs.server_ip

我的印象是LEFT JOIN會顯示左表上的所有行,而不管ON條件是否匹配。

SELECT s.* FROM servers s

返回 12 個條目,而第一個查詢僅返回 ip 地址匹配的 1 個條目。

那么如何獲得第一個查詢以顯示服務器表中的所有行以及連接的表數據?

聚合 function count() 將所有行合並為一行。
進行group by以查看每個 IP 地址的計數。

SELECT s.*, COUNT(ssh_logs.id) AS ssh_count FROM servers s  
LEFT JOIN logs ssh_logs ON s.ip_address = ssh_logs.server_ip 
GROUP BY s.ip_address

如果 servers.ip_address 是服務器的唯一字段(主鍵或唯一索引),這將最有效。
如果服務器具有重復的 ip_addresses,則此查詢會將這些 ip_addresses 組合在一起並隱藏應該隱藏的數據。

然而,鑒於這些是服務器,假設 ip_address 是唯一的是合乎邏輯的。

暫無
暫無

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

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