[英]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.