SQLite3多表INNER JOIN语法疑问:为何仅需一个FROM子句?
关于SQLite多表连接的语法疑问解答
首先明确:SQL里要查询某个表的字段,必须把这个表通过FROM或JOIN子句引入查询,不存在“只写主表就能查其他表字段”的情况——你看到的那段SQL,肯定是用了链式显式连接,只是你可能没注意到完整写法。
你之前学的是双表连接的基础形式:
SELECT columns FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
多表连接就是在这个基础上,继续给主表(或已连接的表)添加更多JOIN子句,把关联表依次连进来。比如你遇到的场景,完整写法应该是类似这样:
SELECT d.dept_name, o.order_number, p.product_name, po.quantity FROM Departments d INNER JOIN Employees e ON d.dept_id = e.dept_id INNER JOIN Orders o ON e.employee_id = o.employee_id INNER JOIN ProductsOrders po ON o.order_id = po.order_id INNER JOIN Products p ON po.product_id = p.product_id;
这里FROM只写了主表Departments,但后面通过INNER JOIN依次连接了Employees、Orders、ProductsOrders、Products,每个JOIN都指定了关联条件,所有表都被引入查询,自然能查询它们的字段。
另一种可能是旧的隐式连接写法,把所有表用逗号列在FROM后面,用WHERE指定连接条件,比如:
SELECT d.dept_name, o.order_number, p.product_name, po.quantity FROM Departments d, Employees e, Orders o, ProductsOrders po, Products p WHERE d.dept_id = e.dept_id AND e.employee_id = o.employee_id AND o.order_id = po.order_id AND po.product_id = p.product_id;
这种写法里FROM后面列了所有表,只是用逗号分隔,可能你误以为只写了Departments。
总结:你没有误解多表连接语法,只是之前接触的是双表连接的基础形式,多表连接的标准写法就是通过链式JOIN把所有关联表连到主表上,不需要把所有表都堆在FROM后面。
内容的提问来源于stack exchange,提问作者cosman
相关产品推荐
相关产品推荐

