嵌套SQL语句获取错误。三个表选择

时间:2014-06-09 07:49:37

标签: sql

我不知道我是否过度复杂化,或者我的SQL代码会出错。我想找到所有的' pid'从表格部分匹配。

以下是必要的信息。

表:Parts

pid, Color

表:Supplier

sid

表:Catalog

pid, sid

我正在尝试检索表pid的{​​{1}}中存在Color Red和供应商的sid

这是我迄今为止的尝试:

Supplier

我的第二次尝试说错误,子查询返回超过1行:

SELECT pid 
FROM catalog 
WHERE sid = (SELECT sid 
             FROM 'suppliers' 
             WHERE sid=)(SELECT sid 
                         FROM `catalog` 
                         WHERE pid=)(SELECT pid 
                                     FROM `parts` 
                                     WHERE color = 'Red')

3 个答案:

答案 0 :(得分:2)

为什么不使用两个简单的INNER JOIN而不是那些嵌套的子查询?

SELECT c.pid 
FROM catalog  c
INNER JOIN suppliers s ON c.sid = s.sid
INNER JOIN parts p ON c.pid = p.pid
WHERE p.color = 'Red'

答案 1 :(得分:0)

我认为你可能会错放开放的副词。但我建议改用JOIN查询。

SELECT pid 
FROM Catalog C
INNER JOIN suppliers S ON C.sid = S.sid
INNER JOIN parts P ON C.pid = P.pid
WHERE P.color = 'Red'
AND S.sid = 'your_requirement'

答案 2 :(得分:0)

您应该避免@ncdreamy建议的内部查询,而是使用JOINS。

SELECT pid 
FROM catalog AS c 
INNER JOIN Parts AS p ON p.pid = c.pid 
INNER JOIN suppliers AS s on s.sid = c.sid
WHERE p.color = 'RED'