2009-05-29 4 views
1

Предположим, у нас есть две таблицы здесь, сообщения и комментарии, отношения одно для многих, в таблице комментариев есть полевой комментарий comment_date.Выделить все записи не соответствуют определенным условиям в объединенной таблице

Теперь я изо всех сил, чтобы получить ожидаемые результаты следующие:

Все посты не имеют комментарии после определенной даты, я могу сделать это с помощью SQL заявления?

ответ

4
SELECT * 
FROM posts p 
WHERE NOT EXISTS(
    SELECT 1 
    FROM comments c 
    WHERE c.comment_date >= 'deadline' 
    AND p.post_id = c.post_id 
) 
+0

Отлично, проверено работало, изучайте ключевое слово «NOT EXISTS», спасибо. –

+0

Спасибо за быстрый ответ. –

1
SELECT * 
FROM posts 
WHERE post_id NOT IN 
     (
     SELECT comment_post 
     FROM comments 
     WHERE comment_date >= @deadline 
     ) 
+0

Испытано, работал хорошо, как и первый, спасибо. это умно, что не нужно указывать внешний ключ. поскольку я использую post_id в комментариях, поэтому, если заменить comment_post на post_id, это будет прекрасный ответ. –

+0

NOT IN фактически оптимизирован для НЕ СУЩЕСТВУЕТ в MySQL – Quassnoi

Смежные вопросы