我有以下查询:
SELECT c.* FROM companies AS c JOIN users AS u USING(companyid) JOIN jobs AS j USING(userid) JOIN useraccounts AS us USING(userid) WHERE j.jobid = 123;
我有以下问题:
任何帮助,将不胜感激!
USING(字段名)是表示table1.fieldname = table2.fieldname的简写方式。
SQL并未定义完成JOINS的“顺序”,因为这不是语言的本质。显然,必须在语句中指定一个顺序,但是INNER JOIN可以被认为是可交换的:您可以按任何顺序列出它们,您将获得相同的结果。
就是说,当构造一个SELECT … JOIN时,尤其是包括LEFT JOIN的一个,我发现将第三个JOIN视为将新表与第一个JOIN的结果联接在一起,将第四个JOIN视为对联接的联接是有意义的。第二个JOIN的结果,依此类推。
由于它影响启发式的方式,指定顺序可能会影响查询优化器的行为。
否。查询的组装方式要求公司和用户都具有公司ID,Jobs具有用户ID和JobID,而useraccounts具有用户ID。但是,只有公司 或 用户之一需要用户名才能使JOIN起作用。
WHERE子句使用jobs表提供的列来过滤整个结果,即所有JOINed列。