2016-03-27 9 views
0

私はチャットメッセージのトラックを保持する次の表を持っていますグループで好きではないby

match_idはチャットの会話を識別するかなりのIDです。

CREATE TABLE message_log 
(
    id integer, 
    message text, 
    from_id character varying(500), 
    to_id character varying(500), 
    match_id character varying(500), 
    own_account boolean, 
    reply_batch boolean DEFAULT false, 
    insert_time timestamp with time zone DEFAULT now(), 
) 

私は同じmatch_idとは、メッセージが「@」が含まれている送信されない場合は、すべてのmatch_idsを返す必要があります次のクエリ

select match_id from message_log where message not like '%@%' and own_account = true group by match_id 

を構築しました。しかし、クエリはまだ "@"を含むメッセージを含むいくつかの行を返します。私は何のメッセージがmatch_idすべてのクエリの

+0

この問題を示すデータサンプルを提供してください。 –

答えて

1

ファーストに関連する「@」が含まれていない場合にのみmatch_idsを返すクエリを変更するにはどうすればよい

は、最後に余分なコンマがあると、正しくありません。

CREATE TABLE message_log 
(
    id integer, 
    message text, 
    from_id character varying(500), 
    to_id character varying(500), 
    match_id character varying(500), 
    own_account boolean, 
    reply_batch boolean DEFAULT false, 
    insert_time timestamp with time zone DEFAULT now() 
) 

第二に、

select distinct(match_id) from message_log where own_account = TRUE and match_id not in (select `match_id` from message_log where message like '%@%') 
1

あなたは含まれていたメッセージが存在するすべてのmatch_idを除外したいです '@'。

サブクエリと存在しない構造で解決できます。

SELECT ml.match_id 
FROM message_log ml 
WHERE NOT EXISTS (
    SELECT 1 FROM message_log 
    WHERE message LIKE '%@%' 
    AND match_id = ml.match_id) 
    AND ml.own_account = TRUE 
GROUP BY ml.match_id 
関連する問題