sql - 有条件地加入表

标签 sql postgresql

我的测试表是:

create table products (
  product varchar(50) primary key,
  show_reviews boolean
);
create table reviews (
  review_id integer primary key,
  product varchar(50) references products (product),
  review varchar(200)
);
insert into products (product, show_reviews) values
  ('blender', true),
  ('toaster', false),
  ('microwave', true);
insert into reviews (review_id, product, review) values
  (1, 'blender', 'Excellent'),
  (2, 'toaster', 'Terrible'),
  (3, 'toaster', 'Would not buy again'),
  (4, 'microwave', 'Wonderful'),
  (5, 'microwave', 'Splendid');

我正在寻找生成如下结果集的查询:

  product    |  show_reviews  |  review_id  |  review
-------------+----------------+-------------+----------
  blender    |  true          |  1          |  Excellent
  toaster    |  false         |  null       |  null
  microwave  |  true          |  4          |  Wonderful
  microwave  |  true          |  5          |  Splendid

本质上,我想根据 show_reviews 的值有条件地加入 reviews 表。这是我想出的:

select products.*, rev.*
from products
left join (
    select reviews.*
    from reviews
    join products as p on p.product = reviews.product
    where p.show_reviews = true
  ) as rev on rev.product = products.product;

还有哪些其他方法可以做到这一点?

最佳答案

select *
from
    products p
    left join
    reviews r on r.product = p.product and p.show_reviews
;

关于sql - 有条件地加入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652985/

相关文章:

sql oracle 使用更新

postgresql - 如何删除名称中带有回车符的 PostgreSQL 数据库?

ruby-on-rails - Rails 4 - 如何在开发中使用 sqlite3 并在生产中使用 PostgreSQL w/Heroku

sql - 字符串大于或小于

sql - postgres json数组元素和空返回

mysql - 如何在 apache Drill 中使用 sysdate

postgresql - postgre组有

postgresql - Pgcrypto 命令产生非标准输出

sql - 选择用户和所有投票 SQL

MYSQL 按兼容性分组产品