2017-03-08 15 views
1

我有4個表的數據庫,我想加入,但我得到錯誤的結果,我不明白爲什麼
在新的MySQL,獲取錯誤的結果使用內部連接

這是MySQL查詢我跑

SELECT co_id, u_name, c_name, e_status 
FROM users 
INNER JOIN company_owners ON u_id = co_userFk 
INNER JOIN company ON co_companyFk = c_id 
INNER JOIN employees ON u_id = userFk WHERE c_id = "1" 

這是結果我得到

+------------+-------------+-----------+------------------+ 
| co_id  | u_name  | c_name | e_status   | 
+------------+-------------+-----------+------------------+ 
| 1   | Simon  | SimonCorp | Chef    |      
| 1   | Simon  | SimonCorp | Chef    |             
+------------+-------------+-----------+------------------+ 

這是結果,我想

+------------+-------------+-----------+------------------+ 
| co_id  | u_name  | c_name | e_status   | 
+------------+-------------+-----------+------------------+ 
| 1   | Simon  | SimonCorp | Chef    |      
+------------+-------------+-----------+------------------+ 

這是我的數據庫結構

Users 
    +------------+-------------+----------+------------------+ 
    | u_id  | u_name  | u_address| u_email   | 
    +------------+-------------+----------+------------------+ 
    | 1   | Simon  | street 1 | [email protected] |   
    | 2   | Andrew  | street 2 | [email protected] |   
    | 3   | Tom   | street 3 | [email protected] |   
    | 4   | Charlie  | street 4 | [email protected]|    
    +------------+-------------+----------+------------------+ 

    Company 
    +------------+-------------+----------+--------------------------+ 
    | c_id  | c_name  | c_address| c_email     | 
    +------------+---------------+----------+------------------------+ 
    | 1   | SimonCorp  | street 1 | [email protected] | 
    | 2   | SimonotherCorp| street 2 |[email protected]| 
    +------------+---------------+----------+------------------------+ 



    Employees 
    +------------+-------------+----------+----------------------+ 
    | e_id  | companyFk | userFk | e_status   | 
    +------------+-------------+----------+----------------------+ 
    | 1   | 1   | 1  | Chef     |   
    | 2   | 2   | 2  | employee    | 
    | 3   | 2   | 1  | employee    |   
    | 4   | 1   | 3  | employee    |      
    +------------+-------------+----------+----------------------+ 
    Simon is chef of first company and the employee in the second 



    Company_Owners 
    +------------+--------------+-------------+ 
    | co_id  | co_companyFk | co_userFk | 
    +------------+--------------+-------------+ 
    | 1   | 1   | 1   |   
    | 2   | 2   | 1   |      
    +------------+--------------+-------------+ 
    Simon owns both companies 

回答

0

這是因爲你的表的員工正在考慮只u_id = userFk作爲加盟條件。

表的員工有2條線連接到該員工(西門):

Employees 
    +------------+-------------+----------+----------------------+ 
    | e_id  | companyFk | userFk | e_status   | 
    +------------+-------------+----------+----------------------+ 
    | 1   | 1   | 1  | Chef     |   
    | 2   | 2   | 2  | employee    | 
    | 3   | 2   | 1  | employee    |   
    | 4   | 1   | 3  | employee    |      
    +------------+-------------+----------+----------------------+ 

因此,對於每一行,將項目的結果與西蒙作爲公司的老闆,考慮到聯合。

要處理此問題,您可以限制連接也考慮companyFK

這將是這樣的:

SELECT co_id, u_name, c_name, e_status 
FROM users 
INNER JOIN company_owners ON u_id = co_userFk 
INNER JOIN company ON co_companyFk = c_id 
INNER JOIN employees ON (u_id = userFk and c_id = companyFk) WHERE c_id = "1" 
0

如果你需要不同的(不repetead行),您必須添加不同的條款

SELECT distinct co_id, u_name, c_name, e_status 
FROM users 
INNER JOIN company_owners ON u_id = co_userFk 
INNER JOIN company ON co_companyFk = c_id 
INNER JOIN employees ON u_id = userFk WHERE c_id = "1"