名前、スーパーバイザー、マネージャーの3つのテーブルがあります。名前のリストと、それらがスーパーバイザー、マネージャー、またはその両方であるかどうかを表示するクエリが必要です。
私の現在のクエリは問題の90%を達成し、スーパーバイザーであるものをすべて返し、それらがマネージャーでもあるかどうかをチェックします。ただし、ユーザーが「スーパーバイザー」ではなく「マネージャー」である場合は、クエリにリストされていません。
SELECT name.id,
name.email,
IF(sup.code = 1, 'Yes', 'No') as Supervisor,
IF(man.userId IS NOT NULL, 'Yes', 'No') as Manager
FROM employee name
LEFT JOIN supervisor sup ON name.id = sup.id
LEFT JOIN manager man ON name.id = man.id
WHERE sup.code = 1
ありがとうございました
あなたの問題はwhere
条項です。これを含めることにより、結果を制限して、その値が設定されているもののみを含めることになります。明らかに、これは監督者ではない人には当てはまりません。
これouternish
はあなたの参加を壊します。その機能を壊さずに左結合に追加の条件を設定するには、条件をon
句に移動する必要があります。この場合、where
従業員ごとにスーパーバイザーテーブルに複数のエントリが存在する可能性がない限り、句を完全に削除することもできるようです。
とにかく、あなたの2つの選択肢は次のとおりです。
SELECT name.id,
name.email,
IF(sup.code = 1, 'Yes', 'No') as Supervisor,
IF(man.userId IS NOT NULL, 'Yes', 'No') as Manager
FROM employee name
LEFT JOIN supervisor sup ON name.id = sup.id
LEFT JOIN manager man ON name.id = man.id
そして:
SELECT name.id,
name.email,
IF(sup.code = 1, 'Yes', 'No') as Supervisor,
IF(man.userId IS NOT NULL, 'Yes', 'No') as Manager
FROM employee name
LEFT JOIN supervisor sup ON name.id = sup.id AND sup.code = 1
LEFT JOIN manager man ON name.id = man.id
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加