2

我有 2 张桌子:

  1. table_name:user_tracking
    包含列:id、bill_no、container_type、origin_id、destination_id

  2. table_name:sea_ports
    包含列:id、bill_no、port_name

我想编写一个查询来获取源端口名和目标端口名。

我的查询是:

select a.container_type, 
       b.port_name as origin_port
from user_tracking a 
left join sea_ports b 
on a.bill_no = b.bill_no 
where a.bill_number = '$bill_no'

如何连接两列origin_id并在表destination_id中的同一字段上获得两个不同的输出?idsea_ports

4

1 回答 1

5

您需要加入表格sea_ports两次,以便获得port_name每个起点和终点的信息。还有一件事,我猜,你需要使用INNER JOIN而不是LEFT JOIN因为总会有目的地和起源,对吧?:D

SELECT  a.ID,
        a.bill_no,
        a.container_type,
        b.port_name AS Origin_name,
        c.port_name AS Destination_name
FROM    user_tracking a
        INNER JOIN sea_ports b
            ON a.origin_id = b.id
        INNER JOIN sea_ports c
            ON a.destination_id = c.id
WHERE   a.bill_number = '$bill_no'

作为旁注,SQL Injection如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-27T13:14:52.387 回答