我正在编写一个 SQL 语句,它需要:
- 找有一定数量的工作
- 将该工作与另一张桌子相匹配
- 显示结果
这是我目前拥有的。
select * from PreviousJobs pj, Jobs j where jobId = '273121'
AND where (pj.sOtherRef = j.sOtherRef) = True
嗯嗯
您不需要 =True 或第二个 where。
只是
select * from PreviousJobs pj, Jobs j where jobId = '273121'
AND pj.sOtherRef = j.sOtherRef
不需要嵌套;这是一个简单的 JOIN 是必需的,最好使用显式连接表示法编写:
SELECT cj.*, pj.*
FROM PreviousJobs AS pj
JOIN Jobs AS cj ON pj.sOtherRef = cj.sOtherRef
WHERE cj.jobId = '273121'
您不需要语句中的第二个 WHERE(这是一个语法错误;您应该向我们提供您的 DBMS 给您的错误消息)。您无需将比较与 TRUE 进行比较。
FROM 子句中以逗号分隔的表名列表在 SQL-86 和 SQL-89 中是必需的,但自从 SQL-92 支持被添加到 DBMS 后就不再需要了。您应该了解它,以便如果您阅读旧 SQL,您就会知道它的含义。但是你应该计划只使用新的 JOIN 符号,除非工作场所标准有压倒性的(和不明智的)使用旧符号的压力。
根据您使用的 DBMS,您可能会发现表别名中的 AS 是不允许的 (Oracle),即使标准说没问题。这种差异就是为什么在问题中包含有关您的 DBMS 的信息是一个好主意的原因。
查询将是..
select *
from PreviousJobs pj inner join Jobs j ON pj.sOtherRef = j.sOtherRef
where j.jobId = '273121'