3

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

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

或类似的东西而不是

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

?

我正在使用 MySQL。

编辑
我从我被误解的答案中看到。第二个示例工作正常,但对于许多表来说变得非常冗长和冗长。我正在寻找一种更简洁的语法,而不是更复杂的方法来实现这一点。

4

4 回答 4

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;
于 2012-06-27T09:13:14.477 回答
4

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

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

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

SELECT *
FROM a
NATURAL JOIN b
NATURAL JOIN c

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

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

更多关于NATURAL JOIN

于 2012-06-27T09:25:23.373 回答
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'
于 2012-06-27T09:23:33.253 回答
-1

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

SELECT Persons.Name
FROM Persons
INNER JOIN Orders
ON Persons.Id = Orders.Id;
于 2012-06-27T09:15:47.920 回答