我有两张桌子:
table_name:user_tracking
使用列:id,bill_no,container_type,origin_id,destination_id
table_name:sea_ports
使用列:id,bill_no,port_name
我想编写单个查询来获取origin port_name和目标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
以获得两种不同的输出?
答案 0 :(得分:4)
您需要加入表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'
作为旁注,如果值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。