0

我正在编写一个 SQL 语句,它需要:

  1. 找有一定数量的工作
  2. 将该工作与另一张桌子相匹配
  3. 显示结果

这是我目前拥有的。

select * from PreviousJobs pj, Jobs j where jobId = '273121' 
AND where (pj.sOtherRef = j.sOtherRef) = True    

嗯嗯

4

3 回答 3

4

您不需要 =True 或第二个 where。

只是

select * from PreviousJobs pj, Jobs j where jobId = '273121' 
AND pj.sOtherRef = j.sOtherRef 
于 2012-05-23T03:18:57.160 回答
4

不需要嵌套;这是一个简单的 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 的信息是一个好主意的原因。

于 2012-05-23T03:42:17.380 回答
1
  1. 寻找具有特定编号的工作: where jobId = '273121'
  2. 将该作业与另一个表匹配:pj.sOtherRef = j.sOtherRef 上的内部联接
  3. 显示结果:select * from PreviousJobs pj

查询将是..

select *
  from PreviousJobs pj inner join Jobs j ON pj.sOtherRef = j.sOtherRef
 where j.jobId = '273121'
于 2012-05-23T06:44:35.953 回答