2011-08-03 33 views
0

我有查詢排除與JOIN

SELECT table1.name, table2.wage, table3.bonus table5.shift 
FROM table1 
    INNER JOIN table2 ON table1.userid = table2.userid 
    INNER JOIN table3 ON table2.userid = table3.userid 
    LEFT JOIN table5 ON table1.userid = table5.userid; 

我還需要看看錶「休假」,並從上面的查詢中排除。

"vacation.userid" = "table1.userid" 

INNER JOIN vacation ON table1.userid != vacation.userid 

,但由於某種原因,這仍顯示它們在列表中。

回答

0

嘗試將假期表包含在LEFT JOIN中,然後添加WHERE子句來獲取度假連接失敗的記錄。

SELECT table1.name, table2.wage, table2.bonus table3.shift, table4.vacation 
    FROM table1 
INNER JOIN table2 ON table1.userid = table2.userid 
INNER JOIN table3 ON table2.userid = table3.userid 
INNER JOIN table4 ON table4.userid = table4.userid 
LEFT JOIN table5 ON table1.name = table5.position 
LEFT JOIN vacation on vacation.userid = table1.userid 
WHERE vacation.userid IS NULL; 
+0

感謝這部作品,有沒有其它方法來完成相同的? – BUddhaxx

+0

請注意,只有在用戶標識爲「UNIQUE」的情況下,此功能纔有效。如果人們可以有多個假期記錄,則會在您的查詢中得到重複。請參閱我發佈的另一個「NOT EXISTS」版本。 – Ariel

+0

我有點困惑 - 這有助於回答這個問題,但是您仍然需要一種不同的方式來解決問題?這是功課還是什麼? – scwagner

0
SELECT table1.name, table2.wage, table2.bonus table3.shift 
FROM table1 
    INNER JOIN table2 ON table1.userid = table2.userid 
    INNER JOIN table3 ON table2.userid = table3.userid 
    LEFT JOIN table5 ON table1.name = table5.position 
    LEFT JOIN vacation ON vacation.userid = table1.userid 
WHERE 
    vacation.userid IS NULL; 
0
SELECT table1.name, table2.wage, table3.bonus table5.shift 
FROM table1 
    INNER JOIN table2 ON table1.userid = table2.userid 
    INNER JOIN table3 ON table2.userid = table3.userid 
    LEFT JOIN table5 ON table1.userid = table5.userid; 
WHERE NOT EXISTS 
    (SELECT * FROM vacation WHERE vacation.userid = table1.userid)