I have two tables, the match
table keeps track of matches and the message_log
table keeps track of conversations for a match. Right now I'm getting all the matches by the following query
SELECT * FROM match order by id DESC
But I want to modify it so that it would only return matches that have at least one message in the message_log
and at least one message has own_account
set to false.
my match table
CREATE TABLE public.match
(
id bigint NOT NULL DEFAULT nextval('match_id_seq'::regclass),
match_id character varying(500) COLLATE pg_catalog."default",
name character varying(30) COLLATE pg_catalog."default",
birthdate timestamp with time zone,
bio text COLLATE pg_catalog."default",
my_id character varying(500) COLLATE pg_catalog."default",
username character varying(500) COLLATE pg_catalog."default",
insert_time timestamp with time zone DEFAULT now(),
account_id bigint,
CONSTRAINT match_pkey PRIMARY KEY (id),
CONSTRAINT match_match_id_key UNIQUE (match_id),
CONSTRAINT matcch_account_fk FOREIGN KEY (account_id)
REFERENCES public.account (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
)
my message_log table
CREATE TABLE public.message_log
(
id bigint NOT NULL DEFAULT nextval('message_log_id_seq'::regclass),
message text COLLATE pg_catalog."default",
from_id text COLLATE pg_catalog."default",
to_id text COLLATE pg_catalog."default",
match_id text COLLATE pg_catalog."default",
unix_timestamp bigint,
own_account boolean,
reply_batch boolean DEFAULT false,
insert_time timestamp with time zone DEFAULT now(),
account_id bigint,
match_pk bigint,
CONSTRAINT message_log_pkey PRIMARY KEY (id),
CONSTRAINT message_log_message_from_id_to_id_match_id_unix_timestamp_key UNIQUE (message, from_id, to_id, match_id, unix_timestamp),
CONSTRAINT message_log_account_fk FOREIGN KEY (account_id)
REFERENCES public.account (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE,
CONSTRAINT message_log_match_id_fk FOREIGN KEY (match_pk)
REFERENCES public.match (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
)