SQL在单列上连接多个表

时间:2012-06-27 09:03:04

标签: mysql sql join

我可以使用USING子句加入2个以上的表吗?即我可以这样做吗

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

或类似的东西而不是

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

我正在使用MySQL。

修改
我从答案中看到我被误解了。第二个例子运行正常,但对于许多表来说只是变得非常冗长和冗长。我正在寻找一种更清晰的语法,而不是更复杂的方法来实现这一目标。

4 个答案:

答案 0 :(得分:4)

不,遗憾的是您无法在示例中使用语法。它不是有效的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;

答案 1 :(得分:4)

没有这样的语法可以实现你想要的东西,但是有一件事情可以接近:

有点被人看不起,但你可以考虑使用NATURAL JOIN语法,其中用于连接的条件是隐含的,因为你不需要指定要连接的列上。隐含条件发生在您要加入的表中具有相同名称的列上。

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

SELECT *
FROM a
NATURAL JOIN b
NATURAL JOIN c

这将隐式连接列date上的表,因为表中的字段名称相同。

这种方法的缺点当然是你不能在另一个表中拥有任何其他具有相同名称的列,否则你的连接将会中断,因为这些列将考虑在内无意中加入条件。

更多关于NATURAL JOIN

答案 2 :(得分:1)

使用UNION ALL

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

答案 3 :(得分:-1)

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

SELECT Persons.Name
FROM Persons
INNER JOIN Orders
ON Persons.Id = Orders.Id;