将语法与联接一起使用时从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)