Mysql SQL在单个列上连接多个表

Mysql SQL在单个列上连接多个表,mysql,sql,join,Mysql,Sql,Join,我可以使用USING子句连接两个以上的表吗?i、 我可以这样做吗 SELECT * FROM (a, b, c) USING(date) 或者类似的东西而不是 SELECT * FROM a, b USING(date), c USING(date) ? 我正在使用MySQL 编辑 我从回答中看出我被误解了。第二个示例工作得很好,但对于许多表来说都非常冗长。我正在寻找更简洁的语法,而不是更复杂的方法来实现这一点。不,很遗憾,您不能在示例中使用语法。它不是有效的SQL 相反,您可以使用以下任一

我可以使用
USING
子句连接两个以上的表吗?i、 我可以这样做吗

SELECT * FROM (a, b, c) USING(date)
或者类似的东西而不是

SELECT * FROM a, b USING(date), c USING(date)
?

我正在使用MySQL

编辑

我从回答中看出我被误解了。第二个示例工作得很好,但对于许多表来说都非常冗长。我正在寻找更简洁的语法,而不是更复杂的方法来实现这一点。

不,很遗憾,您不能在示例中使用语法。它不是有效的SQL

相反,您可以使用以下任一选项:

您可以使用显式的
JOIN
语法来实现所需的功能

SELECT *
    FROM x
    LEFT JOIN y USING(date)
    LEFT JOIN z USING(date);
通常为了更好地控制,您应该使用
ON
子句

SELECT *
    FROM x
    LEFT JOIN y ON x.date = y.date
    LEFT JOIN z ON y.date = z.date;

可以使用JOIN子句连接两个表,但这两个表必须使用外键连接,例如:

SELECT Persons.Name
FROM Persons
INNER JOIN Orders
ON Persons.Id = Orders.Id;
使用UNION ALL

SELECT * FROM a WHERE myDate = 'yourDate'
UNION ALL
SELECT * FROM b WHERE myDate = 'yourDate'
UNION ALL
SELECT * FROM c WHERE myDate = 'yourDate'

没有这样的语法来实现您想要的,但是有一件事很接近:

它有点被看不起,但您可以研究使用的是
自然联接
语法,其中用于联接的条件是隐式的,您不需要指定要联接的列。隐式条件发生在要加入的表中具有相同名称的列上

如果
date
是所有表中唯一具有相同名称的列,则可以执行以下操作:

SELECT *
FROM a
NATURAL JOIN b
NATURAL JOIN c
这将隐式连接列
date
上的表,因为表中的字段名相同

这种方法的缺点当然是,在另一个表中不能有任何其他具有相同名称的列,否则您的联接将中断,因为这些列也会无意中被分解到联接条件中


更多关于

为什么你想要解决或解决的问题是什么achive@shareef我加入了10多个表(不是一个好主意,但我在这里没有选择),都在日期列上,只是想要一个更简洁的语法。-1表示“必须”而不是“应该”。例如,MyISAM不支持/强制外键约束。这并不能实现我想要的。我只想为所有连接在同一列上的表的整个列表编写一次using子句。
上的
示例将有2个日期列,而使用
示例将只有1个。@baruch您的问题是“这可以做到吗?”。我没有回答“不,这不是正确的SQL语法”,而是回答“这是正确的SQL语法”。我将更新我的答案,指出您的示例不是正确的SQL语法。
NATURAL JOIN
s的最大缺点是它们在任何公共名称(&&common format columns)上进行连接。这是迄今为止真正回答这个问题的唯一答案,虽然这对我没有帮助,因为还有其他同名列。@baruch很遗憾,您要使用的语法不明确。试着理解歧义可能来自何处,为什么最常用的语法更复杂,为什么它们让你能更好地控制你在做什么,最终你会对它们感到更舒服。很确定这就是原始海报想要的。