4

私は2つのテーブルを持っています

ユーザーテーブル

 user_id | name  |
    1    | peter |
    2    | kofi  |
    3    | sam   |
    4    | nasah |
    5    | sarah |
    6    | david |
    7    | dan   |

タイムテーブル

 time_id | user_id | register
    1    |     1   |  present
    2    |     2   |  absent
    3    |     3   |  absent
    4    |     4   |  present
    5    |     5   |  absent

「登録」列の下の「時間」テーブルで、ユーザーはシステムにログインするときに「存在」または「不在」を登録できます。

登録が「不在」であるか、まったく登録されていないユーザーを選択するmysqlクエリが必要です。

返される結果は次のようになります

kofi  | absent
sam   | absent
sarah | absent
david | 
dan   | 
4

2 に答える 2

3

これはどうですか

SELECT t2.name, t1.register 
FROM time t1
RIGHT JOIN user t2
ON t2.user_id=t1.user_id
WHERE (t1.register = 'absent' OR t1.register is null)

その動作、ここでテストされています


アップデート1

会話ごとに、時間/日付に基づいてさらにフィルタリングする必要があります

タイムテーブルに「日付」という列名があると仮定して、06-13-12より前にシステムに不在または入室しなかった人を見つけたいとしましょう。

以下のクエリを使用

SELECT t2.name, t1.register, t1.mydate 
FROM time t1
RIGHT JOIN user t2
ON t2.user_id=t1.user_id
WHERE 
     (t1.register = 'absent' OR t1.register is null)
     AND
     (t1.mydate <= '2012-06-13' OR t1.mydate is null)

これが新しい要件のデモです


これがあなたが望んでいたものであることを願っています。

于 2012-06-12T15:13:54.333 に答える
0

このクエリを使用します:

SELECT t1.name,t2.register from user t1 
left join time t2 on t1.user_id=t2.user_id
where t2.register='absent' or t2.register IS NULL;
于 2012-06-12T15:41:47.143 に答える