簡體   English   中英

3個表的內部連接給出重復的結果

[英]Inner join of 3 tables giving repeated results

我有以下3表結構(未提及allcolumns,僅需要)

user_master

user_id(主鍵)

FNAME

雇員

employee_id(主鍵)

user_id(外鍵)

房地產

studexperience_master

exp_id(主鍵)

user_id(外鍵)

我有以下2個mysql查詢,從3個表中獲取數據,同時在1個表中顯示表單display(以下查詢用於搜索結果)。前兩個表正在正常連接但問題是在加入下兩個表時(即員工和studexperience_master)重復獲取數據,如果相同的user_id比結果集中的getttin 3行多3次,這應該只有1行,我試過DISTINCT ALSO FOR SECOND INNER JOIN BUT ISSUE NOT GETTING SOLVE ,HOW THE QUERY SHOULD BE?

$get_work=mysql_query("SELECT DISTINCT wm.work,wm.status FROM user_master um 
INNER JOIN employee emp ON um.user_id =emp.user_id 
INNER JOIN studexperience_master wm 
ON emp.user_id=wm.user_id 
WHERE wm.display='Y' $status_val $company_val $searchkind_val $location_val 
$search_Qualification_val");

        SELECT um.user_id,
       um.fname,
       um.lname,
       um.email,
       um.mobile,
       emp.employee_id,
       emp.ecountry,
       emp.estate,
       emp.ecity,
       emp.prefcities,
       emp.ca,
       emp.cs,
       emp.cwa,
       emp.completed,
       emp.persuing
FROM user_master um
INNER JOIN employee emp 
ON um.user_id =emp.user_id
INNER JOIN studexperience_master wm 
ON emp.user_id=wm.user_id
WHERE wm.display='Y' $status_val 
$company_val $searchkind_val $location_val 
$search_Qualification_val

以及where子句值屬於這樣的值

WHERE wm.display='Y' AND status LIKE '%Fresher%' AND efamiliar LIKE '%Tally %' AND work LIKE 'Excise Audit' AND ecountry LIKE 'pune' OR ecity LIKE 'pune' OR estate LIKE 'pune' OR prefcities LIKE 'pune' AND ca REGEXP '%|CA CPT%' OR cs REGEXP '%|CA CPT%' OR cwa REGEXP '%|CA CPT%' OR completed REGEXP '%|CA CPT%' OR persuing REGEXP '%|CA CPT%'

我在用戶主服務器中有兩個用戶,並且在第三個表中有相應的工作,現在對於monika有2行和dinesh 3行(在第三個表中)所以總共5行應該只有2而且在最后一列我得到顯示表中“工作欄”的所有工作,這應該只是特定用戶的相應作品

user_master

user_id- 2

fname- monika

mobile- 2147 ......

email- a @ ab

雇員

   >employee_id- 1

    >user_id- 2

    >ecity- Amravati

    >ca- CA IPCC Appeared

    >cs- CS Executive Appeared

    >cwa- CWA Inter Appeared   

studexperience_master

ROW1

exp_id-1

user_id- 2

工作 - 稅務審計

ROW2

exp_id-2

user_id- 2

工作 - 增值稅審計

只需更改您的兩個查詢,如下所示

相反,與加盟emp.user_id與加盟um.user_id原因是PK,應該有獨特的數據。

SELECT DISTINCT wm.work,wm.status  
FROM user_master um  
INNER JOIN employee emp  
ON um.user_id =emp.user_id  
INNER JOIN studexperience_master wm  
ON um.user_id=wm.user_id and wm.display='Y' 

第二個查詢就像

   SELECT um.user_id,
   um.fname,
   um.lname,
   um.email,
   um.mobile,
   emp.employee_id,
   emp.ecountry,
   emp.estate,
   emp.ecity,
   emp.prefcities,
   emp.ca,
   emp.cs,
   emp.cwa,
   emp.completed,
   emp.persuing
FROM user_master um
INNER JOIN employee emp 
ON um.user_id =emp.user_id
INNER JOIN studexperience_master wm 
ON um.user_id=wm.user_id and wm.display='Y'

雖然我無法理解這些變量的含義在where 你的where對我來說很奇怪。

WHERE wm.display='Y' $status_val $company_val $searchkind_val $location_val 
$search_Qualification_val

請嘗試以下查詢:

SELECT distinct um.user_id,
       um.fname,
       um.lname,
       um.email,
       um.mobile,
       emp.employee_id,
       emp.ecountry,
       emp.estate,
       emp.ecity,
       emp.prefcities,
       emp.ca,
       emp.cs,
       emp.cwa,
       emp.completed,
       emp.persuing
FROM user_master um
INNER JOIN employee emp 
ON um.user_id =emp.user_id
INNER JOIN 
(SELECT DISTINCT user_id FROM studexperience_master WHERE <your ALL conditions ON this TABLE>) wm 
ON emp.user_id=wm.user_id
WHERE $status_val 
$company_val $searchkind_val $location_val 
$search_Qualification_val;

你可以試試這樣的東西。 如果學生體驗主表有重復項,那么只需嘗試獲取前一條記錄(根據某些條件,您可以根據需要為此記錄執行過濾器)。

Select * from user_master UM
inner join employee EMP on UM.UserId = EMP.UserId
inner join studexperience_master USM on EMP.UserId = (SELECT  TOP 1 UserId FROM studexperience_master RJK WHERE USM.UserId = RJK.UserId)

如果有任何問題或需要任何幫助,請告訴我。,:)

暫無
暫無

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

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