sql >> Database >  >> RDS >> PostgreSQL

Veel-op-veel-relatie om te bepalen of de gebruiker een bericht leuk vindt

Gegevens (ik moest het een beetje veranderen, omdat men niet moet toewijzen aan series):

 CREATE TABLE posts (
  id serial,
  title varchar
);

CREATE TABLE users (
  id serial,
  name varchar
);

CREATE TABLE likes (
  id serial,
  user_id int,
  post_id int
);

INSERT INTO posts (title) VALUES ('First Post');
INSERT INTO posts (title) VALUES ('Second Post');
INSERT INTO posts (title) VALUES ('Third Post');

INSERT INTO users (name) VALUES ('Obama');
INSERT INTO users (name) VALUES ('Trump');

INSERT INTO likes (user_id, post_id) VALUES (1, 1);
INSERT INTO likes (user_id, post_id) VALUES (2, 1);
INSERT INTO likes (user_id, post_id) VALUES (2, 2);
-- I want to retrieve a list of ALL of the posts and whether or not a specific user has liked that post
SELECT id, title
        , EXISTS(
                --EXISTS() yields a boolean value
                SELECT *
                FROM likes lk
                JOIN users u ON u.id = lk.user_id AND lk.post_id=p.id
                WHERE u.name ='Obama'
                ) AS liked_by_Obama
FROM posts p
        ;

Resultaten:

 id |    title    | liked_by_obama 
----+-------------+----------------
  1 | First Post  | t
  2 | Second Post | f
  3 | Third Post  | f
(3 rows)


  1. SQL Server 2008 - Hulp bij het schrijven van eenvoudige INSERT-trigger

  2. Laad gegevens in bestand MySQL MacOS

  3. De kolom rand() van de subquery opnieuw geëvalueerd voor elke herhaalde selectie in MySQL 5.7/8.0 versus MySQL 5.6

  4. MariaDB 10.3 beheren met ClusterControl