簡體   English   中英

MySQL 中的 SQL 語句存在問題

[英]Problem with SQL statement in MySQL

我正在運行 SQL 語句:

$sql = "SELECT pic, userid 
        FROM user_details 
          INNER JOIN wp_users ON user_details.userid  
        WHERE wp_users.id = user_details.userid 
        LIMIT $recordstart, $pagesize
       ";

該查詢旨在查詢來自 user_details 和 wp_users 的 select 記錄,但如果存在匹配項( wp_users.id = user_details.userid ),則應該只查詢 select 。

目標是從一個表中基本上 select 從另一個表中檢索記錄(基於 id 匹配)

問題是它顯示重復的記錄。 我該如何解決這個問題?

您應該將您的 JOIN 條件放在 ON 之后。 像這樣:

$sql="select pic, userid 
      from user_details 
      inner join wp_users on (wp_users.id=user_details.userid)
      limit $recordstart, $pagesize";

但真正的問題是,對於 wp_users 中的每個相應記錄, wp_usersuser_details中有超過 1 條記錄(反之亦然)。 INNER JOIN 導致數據庫生成user_detailswp_users記錄的笛卡爾積 然后根據您當前的 WHERE 條件(wp_users.id=user_details.userid)過濾結果表。 根據您的需要,如果您只想檢索唯一記錄,您可以使用 GROUP BY 或 DISTINCT。 例如,如果您需要userid是唯一的:

$sql="select pic, userid 
      from user_details 
      inner join wp_users on (wp_users.id=user_details.userid)
      group by userid
      limit $recordstart, $pagesize";
SELECT DISTINCT pic, userid 
FROM user_details 
  INNER JOIN wp_users ON wp_users.id=user_details.userid 
LIMIT $recordstart, $pagesize

使用DISTINCT僅返回唯一行並在ON部分完成您的連接條件:

$sql="select distinct pic, userid
      from user_details
      inner join wp_users on wp_users.id=user_details.userid
      limit $recordstart, $pagesize"; 

使用 GROUP BY,因為如果第二個表中有多個記錄,每一個記錄在第一個表中,它會顯示重復記錄

您意外遺漏了ON的 = 部分。

$sql="select pic, userid 
      from user_details 
        inner join wp_users on user_details.userid
        = wp_users.id  
      where wp_users.id=user_details.userid   
  limit $recordstart, $pagesize";

我可能會嘗試

 $sql = "select pic, userid 
 from user_details 
 inner join wp_users on user_details.userid = wp_users.id
 limit $recordstart, $pagesize";

暫無
暫無

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

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