MySQL:在多个条件下从多个列中选择数据

时间:2014-03-14 18:14:51

标签: mysql select

我有以下表格:

Sender
---------
ID, name, type, mobile


Receiver
-----------
ID, name, type, mobile


Ports
-----------
ID, name, city, country


Shipment
-----------
ID, Sender_ID, Receiver_ID, From_Port_ID, To_Port_ID, Date, Status

我试图在我的网页中显示货件表内容,而不是ID。我可以通过以下查询获取发件人和收件人姓名:

SELECT sender.name AS Sender, receiver.name AS Receiver, shipment.id 
FROM sender,receiver,shipment
WHERE shipment.sender_ID=sender.ID AND shipment.receiver_ID=receiver.ID

如何从ports表中获取端口名称?

4 个答案:

答案 0 :(得分:1)

尝试:

SELECT sender.name as Sender, receiver.name as Receiver, shipment.id, ports.name AS Port 
FROM sender,receiver,shipment,ports 
WHERE shipment.sender_ID=sender.ID AND shipment.receiver_ID=receiver.ID AND ports.ID = shipment.From_Port_ID 

答案 1 :(得分:1)

您可以使用ports

连接两次
select sender.name as Sender, receiver.name as Receiver, 
      shipment.id, port1.name as OriginPort, port2.name as DestinationPort
from sender,receiver,shipment, ports port1, ports port2 
WHERE shipment.sender_ID=sender.ID 
      AND shipment.receiver_ID=receiver.ID
      AND shipment.From_Port_ID = port1.id
      AND shipment.To_Port_ID = port2.id

我还建议您更改查询以使用显式语法进行连接(有关详细信息,请参阅Explicit vs implicit SQL joins),如下所示:

select sender.name as Sender, receiver.name as Receiver, 
      shipment.id, port1.name as OriginPort, port2.name as DestinationPort
from sender JOIN shipment ON sender.ID = shipment.sender_ID
        JOIN receiver ON shipment.receiver_ID=receiver.ID
        JOIN ports port1 ON shipment.From_Port_ID = port1.id
        JOIN ports port2 ON shipment.To_Port_ID = port2.id

答案 2 :(得分:0)

您可以使用:

SELECT sender.name as Sender, receiver.name as Receiver, ports_a.name as FromPort,
ports_b.name as ToPort

FROM Shipment as shipment

JOIN Sender
ON sender.ID= shipment.sender_ID

JOIN  Receiver  as receiver
ON receiver.ID= shipment.receiver_ID

JOIN Ports as ports_a
on ports_a.ID= shipment.From_Port_ID 

JOIN Ports as ports_b
on ports_b.ID= shipment.To_Port_ID

第一行包含SELECT,正如您所做的那样,只需输入您想要获取的所有信息。

第二部分是,指定从哪里获取信息。 FROM将是from表,它是连接所有其他表的主表。

然后,该表将使用关键字JOIN与其他表连接。它具有共同的参考,就像连接表一样。此引用是ID表中的Shipment,例如sender_ID

例如,sender_ID for将与发件人表中的Sender.id匹配,因为Sender.id#5将与Shipment.sender_ID#5相关联。

答案 3 :(得分:0)

我希望你想要的东西!!!! ......

select 
 S.name as Sender
,R.name as Receiver
,SH.id
,PFROM.name
,PTO.name

from shipment AS SH

INNER JOIN PORTS AS PFROM ON PFROM.ID = SH.From_Port_ID
INNER JOIN PORTS AS PTO ON PTO.ID = SH.From_Port_ID
INNER JOIN SENDER AS S ON SH.sender_ID=S.ID 
INNER JOIN RECEIVER AS R ON SH.receiver_ID=R.ID