0

次のステートメントは機能します。

SELECT p._id, last_name, first_name_pref, title, photo_big
FROM People p NATURAL JOIN SpecialtyAreas s
WHERE specialty_area_1 = (SELECT s._id FROM SpecialtyAreas s WHERE s.name = 'Customer Service')
ORDER BY last_name, first_name_pref;

しかし、これはそうではありません:

SELECT p._id, last_name, first_name_pref, title, photo_big
FROM People p NATURAL JOIN Offices o
WHERE office = (SELECT o._id FROM Offices o WHERE o.name = 'Beadle County')
ORDER BY p.last_name, p.first_name_pref;

2 つのテーブル間で見つけることができる唯一の違いは、People.officeとしてマークされているのINTEGER REFERENCES "Offices._id"("")に対し、としてPeople.specialty_area_1マークされていることです。TEXT REFERENCES "SpecialtyAreas._id"("").

データ型の違いがこの問題を引き起こしますか?

また、両方の文字列は実際にはデータベースにあります。

データベースにクエリを実行する簡単な方法はありますか? クエリはspecialty_areas、私が望むものを達成します。クエリから同じ結果が得られない理由を見つけようとしていofficeます。

4

1 に答える 1

0

外部キー関係に含まれる親テーブルと子テーブルの列でデータ型を一致させたい。

シンプルさはしばしば見る人の目に留まりますが、私はインライン ビューが好きです。

       select * from people p
       join
       (
        select _id from people join offices
        on people.office = offices._id 
        and offices.name = 'Beadle County'

        UNION

        select _id from people join specialtyareas
        on people.specialty_area_1 = specialtyareas._id 
        and specialtyareas.name='Customer Service'

       ) as MatchingPeople
       on MatchingPeople._id = p._id
于 2013-03-07T17:45:26.130 に答える