问题陈述
编写查询以显示正在运送到“Chennai”或“Cochin”端口的shipment_entity详细信息。显示基于id的升序排序的记录。
预期产出
select se.id,
se.name,
se.contact_first_name,
se.contact_last_name,
se.identification_number,
se.credit_limit,
se.is_active,s
e.address_id
from shipment_entity se,
shipment s,
port p
inner join shipment s on se.id = s.shipment_entity_id
inner join port p on s.departure_port_id=p.id
where p.name in ('Chennai','Cochin');
SQL错误:
内部联接发货在se.id = s.shipment_entity_id
*
第3行的错误:ORA-00904:“SE”。“ID”:标识符无效
答案 0 :(得分:0)
您的问题是您已将ANSI 92之前的语法与显式连接语法相结合。您只需要在FROM子句中包含一次表:
...
from shipment_entity se
inner join shipment s on se.id = s.shipment_entity_id
inner join port p on s.departure_port_id=p.id
where ...
顺便提一下,如果您学习使用间距和换行符来使布局更清晰,那么您将使自己的生活变得更轻松 - 以及其他读取您代码的人的生活。这并不挑剔:可读性是我们的代码所需的功能,因为它使维护和调试更容易。
答案 1 :(得分:0)
您需要删除,装运s,端口p
select se.id,se.name,se.contact_first_name,se.contact_last_name,se.identification_number,se.credit_limit,se.is_active,se.address_id
from shipment_entity se ##### you need to remove this-> ,shipment s,port p
inner join shipment s on se.id = s.shipment_entity_id
inner join port p on s.departure_port_id=p.id where p.name in ('Chennai','Cochin');
答案 2 :(得分:0)
您正在使用传统的oracle和ansi语法。使用传统语法时,您不需要显式"JOIN"
和"ON"
子句。同样,如果您使用的是Ansi语法,则不应在FROM
子句中提供所有表。
请尝试以下任何一种查询:
常规:
select se.id,
se.name,
se.contact_first_name,
se.contact_last_name,
se.identification_number,
se.credit_limit,
se.is_active,s
e.address_id
from shipment_entity se,
shipment s,
port p
where se.id = s.shipment_entity_id
and s.departure_port_id=p.id
and p.name in ('Chennai','Cochin');
ANSI:
select se.id,
se.name,
se.contact_first_name,
se.contact_last_name,
se.identification_number,
se.credit_limit,
se.is_active,s
e.address_id
from shipment_entity se
join shipment s
on se.id = s.shipment_entity_id
join port p
on s.departure_port_id=p.id
where p.name in ('Chennai','Cochin');