我有两张桌子:
表名:user_tracking
列:id,bill_no,container_type,origin_id,destination_id
表名: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
上的两列id
和sea_ports
连接起来以获得两个不同的输出? 最佳答案
您需要加入表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
的攻击。请看下面的文章,学习如何预防。通过使用PreparedStatements
可以去掉在值周围使用单引号。How to prevent SQL injection in PHP?
关于mysql - MySQL在一个列上加入两个列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14547692/