【问题标题】:SQL JOIN USING and WHERESQL JOIN 使用和 WHERE
【发布时间】:2016-10-27 08:13:09
【问题描述】:

这是SQL JOIN where to place the WHERE condition?的后续版本

我更喜欢在连接上使用 USING 子句,但我还不能将字段值条件与连接放在一起。

SELECT 1
  FROM table1 t1
  JOIN table2 t2 USING(id) AND t2.field = 0;

ORA-00933: SQL command not properly ended

是否可以将 USING 和其他条件作为 JOIN 子句的一部分?

【问题讨论】:

  • 不,这是不可能的。
  • 您链接到的公认答案很差。请参阅我对此的评论。

标签: sql join ansi


【解决方案1】:

你可以使用:

SELECT 1
FROM table1 t1
JOIN table2 t2 USING(id)
WHERE t2.field = 0;

使用USING(id) 就像使用ON t1.id = t2.id 一样,只是在JOIN 结果中而不是两列t1.idt2.id 只有一列id

对于带有条件的INNER JOIN USING,后跟OUTER JOIN,您需要一个子查询来保持WHEREUSING

SELECT ...
FROM (SELECT id, ...
    FROM table1 t1
    JOIN table2 t2 USING(id)
    WHERE t2.field = 0) s
LEFT JOIN ...;

对于带有条件的OUTER JOIN USING,您需要一个子选择:

SELECT ...
FROM table1 t1
LEFT JOIN (SELECT *
    FROM table2 t2
    WHERE t2.field = 0) t2
USING (id);

参见this 回复ON/WHEREJOIN。混合INNEROUTERJOINs时,请参阅this re ON/WHERE

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多