0

私は2つのテーブルを持っています:

Employee(empNo, lName, fName, sex, dob, address, deptno, position)
Zip(city, state, zipcode)

Employee テーブルでは、住所は次のように格納されます。55 Maple Ln., AL 55555

はい、これがアドレスを保存する最も恐ろしい方法であることはわかっていますが、これは私の手に負えません。

empNo、lName、fName、住所の番地部分、州部分、都市、郵便番号をクエリで返す必要があります。これは私が使用しているものであり、適切に動作させるのに少し苦労しています:

SELECT empNo, lName, fName,
    substr(Address,0, INSTR(Address,',')-1) AS streetAddr,
    city,
    substr(Address, INSTR(Address,',')+2,2) AS stateAddr,
    substr(Address,-5) AS zipC
FROM Employee
    JOIN Zip z ON z.zipcode = zipC
WHERE deptNo = '124';

私が得ているエラーはJOINステートメントにあります。zipC は無効な識別子です。私の問題は、テーブルの郵便番号部分を介して従業員と郵便番号を結合しようとしていることです。これを行う必要があるのは、郵便番号から都市を取得できるようにするためだけです。

編集#1

私もこれを試しました:

SELECT e.empNo, e.lName, e.fName,
    substr(e.Address,0, INSTR(e.Address,',')-1) AS streetAddr,
    z.city,
    substr(e.Address, INSTR(e.Address,',')+2,2) AS stateAddr,
    substr(e.Address,-5) AS zipC
FROM Employee e, Zip z
WHERE deptNo = '124';
4

1 に答える 1

2
SELECT empNo, lName, fName,
    substr(Address,0, INSTR(Address,',')-1) AS streetAddr,
    city,
    substr(Address, INSTR(Address,',')+2,2) AS stateAddr,
    substr(Address,-5) AS zipC
FROM Employee
    JOIN Zip z ON z.zipcode = substr(Address,-5)
WHERE deptNo = '124';

つまり、結合でエイリアスを使用しないでください。

先頭または末尾のスペースの危険性がある場合は、INSTR または substr を決定する前にアドレス値を trim() することもできます。

于 2012-10-02T02:00:45.513 に答える