1

次のようなテーブルがあります。

NAME, SURNAME, TIME_SESSION

John, White, Morning
John, White, Evening
Alexander, Black, Morning
Carl, Yellow, Morning
Carl, Yellow, Afternoon
James, Red, Morning
James, Red, Evening

time_session = 'Morning' であるこのテーブルからすべての要素を取得する必要がありますが、time_session = 'Evening' または time_session = 'Afternoon' を持つレコードを取得する必要はありません。結果は次の例のようになります。

Alexander, Black, Morning.

どんなアドバイスも大歓迎です。

4

3 に答える 3

3

または、代わりに (Guffa の返信とは異なるアプローチ)、次の単一のクエリを使用できますIF EXISTS()

SELECT Name, Surname, Time_Session
FROM dbo.YourTable t1
WHERE t1.Time_Session = 'Morning'
AND NOT EXISTS (SELECT * FROM dbo.YourTable t2 
                WHERE t1.NAME = t2.Name AND t1.Surname = t2.Surname 
                  AND t2.Time_Session IN ('Afternoon', 'Evening'))
于 2012-04-23T09:30:17.077 に答える
3

同じテーブルに対して左結合を作成し、それらに一致するものがないことを確認します。

select NAME, SURNAME, TIME_SESSION
from TheTable t1
left join TheTable t2 on t2.NAME = t1.NAME and t2.TIME_SESSION = 'Evening'
left join TheTable t3 on t3.NAME = t1.NAME and t3.TIME_SESSION = 'Afternoon'
where t1.TIME_SESSION = 'Morning' and t2.NAME is null and t3.NAME is null
于 2012-04-23T09:26:48.593 に答える
1

1つ以上の他の人ではなく、1つ持っている人を探しているなら..

SELECT * 
FROM myTable AS t
WHERE 
    TIME_SESSION = 'Morning'
    AND NOT EXISTS (
        SELECT * FROM myTable AS s
        WHERE 
            s.NAME = t.NAME
            AND s.SURNAME = t.SURNAME
            AND s.TIME_SESSION IN ('Afternoon')
        )

または、エントリが 1 つしかない人を探している場合

SELECT
    NAME, SURNAME
FROM 
    myTable 
GROUP BY 
    NAME, SURNAME
HAVING COUNT(*) = 1

次に参加できるもの:

SELECT 
    t.*
FROM
    myTable AS t
    INNER JOIN (
            SELECT
                NAME, SURNAME
            FROM 
                myTable 
            GROUP BY 
                NAME, SURNAME
            HAVING COUNT(*) = 1
    ) AS l ON l.NAME = t.NAME AND l.SURNAME=t.SURNAME
于 2012-04-23T09:39:30.807 に答える