0

参加したいテーブルが3つあります。

OFFICEには、オフィスの住所/連絡先の詳細が含まれています。CRIMECATには、オフィスが処理できる犯罪法のカテゴリが含まれており、「f_id」を介してOFFICEテーブルに関連付けられています。CIVILCATには、オフィスが処理できる民法のカテゴリが含まれており、「f_id」を介してOFFICEテーブルにも関連付けられています。 。

事務所は、犯罪法、民法、両方、またはなしのカテゴリを扱う場合があります。

ユーザーは場所を入力し、一連のチェックボックスを使用して、検索を実行する前に関心のある法律分野を決定します。これにより、その場所でチェックされたカテゴリのいずれかを処理するオフィスのアドレスのリストが返されます。

これは、犯罪カテゴリまたは市民カテゴリのいずれに対しても完全に機能しますが、それぞれの1つ以上が選択されるとすぐに、クエリはゼロの結果を返します。

クエリの動作スタイルは次のとおりです。

SELECT DISTINCT OF.f_id, OF.acc, OF.add1, OF.add2, OF.add3, OF.city, OF.pc, OF.tel
FROM office OF
JOIN crimecat CR ON OF.f_id=CR.f_id
WHERE OF.id ='3946' AND CR.cat = 'crm'

レンガの壁に頭をぶつけているクエリは次のとおりです。

SELECT DISTINCT OF.f_id, OF.acc, OF.add1, OF.add2, OF.add3, OF.city, OF.pc, OF.tel
FROM office OF
JOIN crimecat CR ON OF.f_id=CR.f_id
JOIN civilcat CI ON OF.f_id=CI.f_id
WHERE OF.id ='3946' AND ((CR.cat = 'crm') OR (CI.cat = 'aap'))

また、ゼロを返すWHERE句の変形を使用してみました。

WHERE (OF.id ='3946' AND CR.cat = 'crm') OR (OF.id ='3946' AND CI.cat = 'aap')

問題はWHERE句ではなくJOINにあると思い始めていますが、それらを記述するためのより良い方法を考えることはできません。

4

1 に答える 1

1

このようなものが役立つかもしれません。私はあなたがどちらかを探していると思いますが、あなたは両方を要求しています

SELECT DISTINCT OF.f_id, OF.acc, OF.add1, OF.add2, OF.add3, OF.city, OF.pc, OF.tel
FROM office OF
LEFT JOIN crimecat CR ON OF.f_id=CR.f_id
LEFT JOIN civilcat CI ON OF.f_id=CI.f_id
WHERE OF.id ='3946' AND ((CR.cat = 'crm') OR (CI.cat = 'aap'))
于 2013-03-26T17:50:57.277 に答える