如何解决使用联接时为什么我的SQL查询不起作用?
我需要有关此简单SQL查询的帮助,但我不知道问题出在哪里:
SELECT id
FROM transaction
JOIN users,link ON transaction.id = link.transaction_id
AND link.user_id = users.id
WHERE users.id = 2;
运行它时,出现此错误:
错误:“交易”附近:语法错误
解决方法
正确使用JOIN
,它将起作用:
SELECT id
FROM transaction JOIN
link
ON transaction.id = link.transaction_id JOIn
users
ON link.user_id = users.id
WHERE users.id = 2;
您的查询可能还有其他问题,例如id
含糊不清,但这不是您要问的问题。
查询的问题是FROM
子句中的逗号范围。逗号可防止后面的ON
子句看到该表。这是,
与CROSS JOIN
不同的一种方式。
当然,简单的规则和最佳实践是:从不在FROM
子句中使用逗号。 始终使用正确的,明确的,标准,可读的JOIN
语法。
假设交易,用户和链接为3个单独的表,我从交易表中获取ID,则可以根据需要进行更改。
这是JOIN的正确语法:
SELECT a.id
FROM transaction a
JOIN users ON transaction.id = link.transaction_id
JOIN link ON link.user_id = users.id
WHERE users.id = 2;
,
当我将您的查询重写为
SELECT ID
FROM TRANSACTION
INNER JOIN LINK
ON TRANSACTION.ID = LINK.TRANSACTION_ID
INNER JOIN USERS
ON LINK.USER_ID = USERS.ID
WHERE USERS.ID = 2
唯一的错误是
ORA-00918: column ambiguously defined
这是因为您在多个表上定义了字段ID。您需要明确标识要返回的ID,如
SELECT TRANSACTION.ID
FROM TRANSACTION
INNER JOIN LINK
ON TRANSACTION.ID = LINK.TRANSACTION_ID
INNER JOIN USERS
ON LINK.USER_ID = USERS.ID
WHERE USERS.ID = 2
还要注意,LINK和TRANSACTION都是Oracle中的保留字。在这种情况下,它不会引起问题,但在其他情况下,可能会引起问题。最好咨询a list of reserved words and keywords来防止出现问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。