如何转换为显式连接?

时间:2014-03-11 23:34:33

标签: mysql sql database join

我有一个我创建的sql语句,我需要将它转换为使用explict连接运算符,以便所有与常量子句进行比较,并且只与常量子句进行比较,显示在查询的where子句中。

我不知道怎么做这个改变,有人能告诉我怎么做这个吗?这就是我所拥有的:

select S.sname
from P, J, S, SPJ
where P.pname = 'Bolt'
and J.city = 'London'
and P.p# = SPJ.p#
and J.j# = SPJ.j#
and S.s# = SPJ.s#;

2 个答案:

答案 0 :(得分:1)

如果我理解你,那么你希望将sql89语法转换为内连接。

看起来像这样:

select
    S.sname
from
    P
    inner join SPJ on `P.p#` = `SPJ.p#` and P.pname = 'Bolt'
    inner join J on `SPJ.j#` = `J.j#` and J.city = 'London'
    inner join S on `SPJ.s#` = `S.s#`

我在加入语法中添加了pnamecity限制,因为这似乎是您要求的。这些也可以留在where子句中。

另请注意,extended or special characters in column names in mysql(如p#)必须用反引号括起来。

答案 1 :(得分:1)

你想要这样的东西:

SELECT S.sname
FROM P INNER JOIN SPJ ON P.p#=SPJ.p#
   INNER JOIN J ON J.j# = SPJ.j#
   INNER JOIN S ON S.s# = SPJ.s#
WHERE P.pname = 'Bolt'
AND J.city = 'London';

用于组合表的条件放在JOIN子句中,其他条件保留在WHERE子句中。