我认为您需要在FROM
子句中列出您将使用的表格,如下所示:
SELECT * FROM a, b WHERE a.id = b.id
我正在学习加入并看到以下内容:
SELECT a.account_id, a.cust_id, a.open_date, a.product_cd
FROM account a INNER JOIN employee e
ON a.open_emp_id = e.emp_id
INNER JOIN branch b
ON e.assigned_branch_id = b.branch_id
WHERE e.start_date < '2007-01-01'
AND (e.title = 'Teller' OR e.title = 'Head Teller')
AND b.name = 'Woburn Branch';
FROM
子句中仅列出了两个表,如下所示:
FROM account a INNER JOIN employee e
另一个表列在FROM
子句之外的另一个join子句中,如下所示:
INNER JOIN branch b
我的第一个想法是抛出了无效的语法错误,因为FROM
子句中没有列出分支表,但我错了。
列出要从中提取数据的表时有哪些规则。任何官方文档的链接都会有很大的帮助。
答案 0 :(得分:1)
INNER JOIN
子句可能会根据其ON
子句的结果来抑制结果集中的记录。
FROM a INNER JOIN b ON a.colx = b.coly
与
的含义完全相同FROM a, b WHERE a.colx = b.coly
并且其中任何一个都将省略未通过ON或WHERE子句的行。
如果你在20世纪90年代的老甲骨文工作,你可以写这个所谓的omega join
FROM a, b WHERE a.colx = b.coly(+)
而不是
FROM a LEFT JOIN b ON a.colx = b.coly
无论哪种方式,您都会从该结果集中获取每一行,即使是那些通过ON或WHERE子句与b中的行不匹配的行。
非聚合MySQL SELECT语句的基本结构如下:
SELECT a bunch of columns
FROM a bunch of tables joined together
WHERE a bunch of filtering predicates
ORDER BY a bunch of columns
LIMIT start,count
FROM子句中的内容包括所有JOINed表。 SELECT子句中的内容选择要包含在结果集中的列。绝对没有任何内容表明您不能在FROM子句中提及表,而是从WHERE子句中省略所有列。
答案 1 :(得分:0)
使用关键字“JOIN”加上逗号(“,”)或“显式连接”表示的连接,加上任何ON,都是FROM子句的 part 。
逗号给出与CROSS JOIN相同的结果。逗号只比使用“JOIN”的连接更弱。在MySQL中,(INNER)JOIN可以在没有ON的情况下编写,在这种情况下,它意味着CROSS JOIN。
另见this (product-independent) answer这些不同的内部联接和&amp;进一步联系OUTER JOINs。
请参阅MySQL documentation重新选择&amp;联接。