I have the following DB tables that I am trying to query:
t_shared_users
user_id
user_category
folder_id
expiry
t_documents
id
folder_id
user_id
user_category
description
created
updated
t_folder
id
type
user_id
user_category
created
updated
I would like to find all the documents you own and have shared access to. ie. search for all documents in t_documents where user_id = 1 AND user_category = 100 but also include those documents in the folder you have access to in t_shared_users. Here is my attempt at the query:
  SELECT
    id,
    folder_id,
    user_id,
    user_category,
    description,
    created,
    updated
  FROM
    t_documents
  WHERE
    user_category = 100
    AND user_id = 1
  UNION ALL
  SELECT
    d.id,
    d.folder_id,
    d.user_id,
    d.user_category,
    d.description,
    d.created,
    d.updated
  FROM
    t_documents d
  JOIN
    t_shared_users s
  ON
    d.folder_id = s.folder_id
  WHERE
    d.user_category = 100
    d.AND user_id = 1
 ORDER BY
   created ASC
 LIMIT
   10
Is there any better/more performant/concise way to write this query? The above seems a little verbose and slow.
edit:
CREATE TABLE t_folder (
  id            SERIAL                   NOT NULL,
  user_category SMALLINT                 NOT NULL,
  user_id       INTEGER                  NOT NULL,
  type          INTEGER                  NOT NULL,
  description   TEXT,
  created       TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
  updated       TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
  PRIMARY KEY (id)
);
CREATE TABLE t_documents (
  id            BIGSERIAL                NOT NULL,
  folder_id     INTEGER,
  user_category SMALLINT                 NOT NULL,
  user_id       INTEGER                  NOT NULL,
  description   TEXT                     NOT NULL,
  created       TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
  updated       TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
  PRIMARY KEY (id)
);
CREATE TABLE t_shared_users (
  id            SERIAL,
  folder_id     INTEGER                  NOT NULL,
  user_category INTEGER                  NOT NULL,
  user_id       INTEGER                  NOT NULL,
  expiry        TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
  PRIMARY KEY (id)
);
 
     
     
    