将语法与联接一起使用时从MYSQL查询中排除

将语法与联接一起使用时从MYSQL查询中排除,mysql,join,Mysql,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; 我还需要查看表“

我有疑问

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"


但由于某些原因,这仍然会在列表中显示它们。

尝试将休假表作为左联接包含在列表中,然后添加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;

请注意,只有在假期中userid是唯一的时,这才起作用。如果人们可以有多个假期记录,您将在查询中得到重复的记录。请参阅我发布的
NOT EXISTS
版本以获取替代方案。我有点困惑--这有助于回答问题,但您仍然需要一种不同的方法来解决问题?这是家庭作业还是什么?
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;
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;
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)