[英]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_users
在user_details
中有超過 1 條記錄(反之亦然)。 INNER JOIN 導致數據庫生成user_details
和wp_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.