目的:日付Xにロールまたは特定のロールの除外によってログインした人の数を戻します。Oracle SQL:1つの表から数を選択し、別の表からサブクエリを使用して選択範囲を絞り込みます。
私はこれまで、さまざまな方法でこれをやってきました。通常、私が望むものを選択し、アプリケーション言語(PHPなど)を使用して結果セットをループし、2番目のテーブルを照会します。私はこれを行うより効率的な、おそらく純粋なSQLの方法を探しています。
LoginTable
+--------------------+
| userName loginDate |
+--------------------+
| jason 08/15/16 |
| jason 09/01/16 |
| john 08/15/16 |
| john 09/04/16 |
| cindy 08/15/16 |
+--------------------+
RoleTable
+--------------------+
| userName role|
+--------------------+
| jason admin |
| jason student |
| jason employee |
| john employee |
| john admin |
| cindy student |
| cindy hr |
| cindy finance |
+--------------------+
これを行うための純粋なOracle SQLの方法はありますか?それ以上の後処理は必要ありませんか?
たとえば、次のような質問があります。 08/15/16にログインし、従業員の役割は持っていたが、学生の役割は持っていないユーザー。
答えはjohnです。
loginDate = 08/15/16とLoginTable.userName中(ROLETABLE役割=従業員と役割<>学生からユーザー名を選択します)
はもちろんのこと、クエリが動作しないでしょうLoginTable からユーザー名の選択に。
これを行うための純粋なSQLの方法はありますか、ループ/後処理またはおそらく一時テーブルに戻す必要がありますか?
これらのテーブルには何百万もの行があるので、効率を求めています。
編集、右の表を取得しようとしています。 – JasonW
質問を変更したため、自分の回答が正しく表示されませんでした。あなたはそうしてはいけません。 –