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

起点の 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'

テーブルの同じフィールドで2 つの列origin_idを結合して、2つの異なる出力を取得するにはどうすればよいですか?destination_ididsea_ports

4

1 に答える 1

5

出発地と目的地ごとにsea_portsを取得できるように、テーブルに 2 回参加する必要があります。port_nameそしてもう1つ、目的地と出発地が常にあるからではなく、使用する必要があると思いますよね?INNER JOINLEFT 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すると、値を一重引用符で囲む必要がなくなります。

于 2013-01-27T13:14:52.387 に答える