簡體   English   中英

MySQL LEFT JOIN列為空

[英]MySQL LEFT JOIN columns are null

我正在嘗試使該查詢下面的內容計數來自具有用戶名的另一個表中的行。 stats表中的每個用戶名都有1行,而pvp表中的每個用戶名都包含多行。 從pvptable連接的所有列均顯示為null,並且使用COUNT動態生成的殺死和死亡事件。 這是SQL查詢。

SELECT 
  *,
  pvptable.username AS USER,
  COUNT(pvptable.killer) AS kills,
  COUNT(pvptable.username) AS deaths,
  ROUND(
    COUNT(pvptable.killer) / COUNT(pvptable.username),
    2
  ) AS kd 
FROM
  stats AS st 
  LEFT JOIN pvp AS pvptable 
    ON pvptable.killer = "Username" 
    AND pvptable.username = "Username" 
WHERE st.username = "Username" ;

您正在混合wherejoin條件:

  • 當您想將一個表的字段與另一表的字段相關時,可以使用join
  • 在要過濾表數據時使用的where

因此,使您的查詢工作:

SELECT 
    *, pvptable.username as user, 
    COUNT(pvptable.killer) as kills,
    COUNT(pvptable.username) as deaths,
    ROUND(COUNT(pvptable.killer) / COUNT(pvptable.username), 2) AS kd  
FROM 
    stats as st
    LEFT JOIN pvp as pvptable 
        ON pvptable.killer=st.Username -- Add some other relations if you need them
WHERE 
    st.username="Username";

對所需的每個統計信息進行聯接,然后使用COUNT(DISINCT id)(假設id是pvp表的唯一鍵),如下所示:-

SELECT st.username as user, 
    COUNT(DISTINCT pvptable_kills.id) as kills,
    COUNT(DISTINCT pvptable_deaths.id) as deaths,
    ROUND(COUNT(DISTINCT pvptable_kills.id) / COUNT(DISTINCT pvptable_deaths.id), 2) AS kd  
FROM stats as st
LEFT OUTER JOIN pvp as pvptable_kills ON pvptable_kills.killer=st.Username
LEFT OUTER JOIN pvp as pvptable_deaths ON pvptable_deaths.username=st.Username
WHERE st.username="Username"
GROUP BY st.username

暫無
暫無

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

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