0

MySQLデータベースに、ユーザーID、ユーザータイプ、およびその他のさまざまなディレクトリ情報を含むディレクトリテーブルがあります。ユーザーには、との2つのタイプがありemployeeますstudent。主キーは(userID, userType)であるため、任意のユーザーがemployeeレコードとレコードを持つことができますstudent(従業員と学生の両方である場合)。

このテーブルのサブセットに対してクエリを実行したいので、次のようにします。

  • ユーザーがemployeexorstudentレコードしかない場合は、そのレコードが使用され、
  • ユーザーがemployeestudentレコードの両方を持っている場合、employeeレコードが使用され、studentレコードは無視されます

クエリに句を含める必要はありませんがORDER BY、かなり複雑なWHERE句(userTypeそれ自体に対するクエリを含む)を含めることができます。

CREATE VIEW理想的には、追加のテーブルやビューを作成せずにこれを実行したいのですが、追加のビューが必要な場合は、システム管理者にアクセス許可を求めることができます。

4

3 に答える 3

2

次に行います。最小限のDDLで必要な場合は-

Select * From YourTable where UserType='Employee'
Union 
Select * from YourTable s where s.UserType='Student' and s.UserId not in (Select UserId from YourTable where UserType='Employee')

最初に従業員を選び、2番目に学生のみを選びます。テストしませんでしたが、t-sqlでは機能するはずです。

'notin'が気に入らない場合

Select * From YourTable where UserType='Employee'
Union 
Select distinct s.* from YourTable s
   left join YourTable e on s.UserId=e.UserId and s.UserType = 'Student' and e.UserType='Employee'
Where e.UserId is null
于 2012-05-14T18:50:17.810 に答える
1

適切なユーザータイプを持つユーザーごとに1つの行を持つテーブルを作成することをお勧めします。この場合、min(userType)を使用すると、両方が存在する場合に従業員が選択されるため、単純に取得できます。

次に、これをクエリで使用できます。次に例を示します。

select table.*
from table join
     (select userid, min(usertype) as usertype
      from table
      group by userid
     ) users
     on table.userid = users.userid and
        table.usertype = users.usertype
于 2012-05-14T18:49:48.967 に答える
0

実際にはテストしていませんが、次のようなものが機能するはずです。

SELECT *
FROM directory
WHERE
    userType = 'employee'
    OR userID NOT IN (
        SELECT userID
        FROM directory
        WHERE userType = 'employee'
    )

平易な英語:すべての従業員(ORの左側)と、対応する従業員がいないすべての学生(ORの右側)を選択します。

于 2012-05-14T18:57:47.557 に答える