2016-04-28 47 views
0

我想使用三个表格选择数据。我需要从演员和合约表中获得股票编号和合约日期,其中电影名称=电影表中的x。使用三个表格选择数据只加入两个表格

我做:

SELECT equity_number, contract_date 
FROM actor, 
    contract, 
    film 
WHERE actor.equity_number = contract.equity_number 
    and title = 'x' 

虽然我得到含糊不清的错误列。

+0

无处不限列,比如'contract.equity_number'而不是'equity_number'。 – jarlh

+1

切换到现代,明确的'JOIN'语法而不是那些旧的,隐含的逗号分隔连接。 – jarlh

+0

@jarlh谢谢你,为什么他们必须被指定,而如果我只使用两个表,我会离开,而不指定表之前的属性 – norskdreamer

回答

1

您与电影表没有任何关系。 并利用编写SQL的一个现代的方式:)

SELECT a.equity_number, c.contract_date 
FROM actor a 
INNER JOIN contract c on a.equity_number = c.equity_number 
INNER JOIN film f on f.SOMERELATIONSHIPID = c.SOMERELATIONSHIPID 
WHERE f.title = 'x' 
0

我建议你使用JOINS,而不是老用逗号分隔的语法。在它为每个表设置别名后,在选择列表中使用这些别名。类似于:

SELECT a.equity_number, 
     c.contract_date 
FROM actor a 
LEFT JOIN contract c ON a.equity_number = c.equity_number 
LEFT JOIN film f ON a.film_id = f.id -- there should be related columns 
      AND f.title = 'x' 
+0

WHERE子句中的f.title条件使最后一个LEFT JOIN作为常规内部联接执行。移至ON子句以获得真正的左连接行为。 – jarlh

+0

@jarlh谢谢你的建议,更新了答案。 –

+0

这个查询会抛出错误。在Oracle SQL中,表名和表别名之间的单词AS是非法的。它可以在列名和别名之间使用(可选)。 – mathguy

相关问题