首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于if else statemnet的postgres内连接

基于if else statemnet的postgres内连接
EN

Stack Overflow用户
提问于 2020-03-31 16:38:05
回答 2查看 43关注 0票数 0

我遇到了这样一种情况:如果一个标志为true,那么内部连接一个表,否则就不需要连接。

代码语言:javascript
复制
SELECT     ti.upc, 
              ti.quantity, 
              ti.return_type, 
              ti.amount, 
              ti.transaction_date, 
              ti.transaction_time, 
              ti.location_id
   FROM       transaction_item ti 
   IF _user = true THEN
   INNER JOIN user_location ul 
   ON         ul.location_id=ti.location_id 
   AND      ul.user_id=_user_id 
   AND        ul.location_id=_location_id
   END IF; 
   WHERE        ti.transaction_date BETWEEN _start_date::date AND  _end_date::date
   AND        ti.upc IS NOT NULL as ti
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 16:41:43

您可以将inner join更改为left join,并将对该变量的检查添加到on条件。然后,where子句可以过滤出应该进行连接但没有成功的行:

代码语言:javascript
复制
SELECT     
    ti.upc, 
    ti.quantity, 
    ti.return_type, 
    ti.amount, 
    ti.transaction_date, 
    ti.transaction_time, 
    ti.location_id
FROM transaction_item ti 
LEFT JOIN user_location ul 
    ON  _user = true
    AND ul.location_id=ti.location_id 
    AND ul.user_id=_user_id 
    AND ul.location_id=_location_id
WHERE    
    ti.transaction_date BETWEEN _start_date::date AND  _end_date::date
    AND ti.upc IS NOT NULL
    AND NOT (_user = true AND ul.location_id IS NULL)
票数 1
EN

Stack Overflow用户

发布于 2020-03-31 18:58:03

您没有使用来自user_location的任何数据,因此我建议您:

代码语言:javascript
复制
SELECT ti.upc, ti.quantity, ti.return_type,  ti.amount, 
       ti.transaction_date, ti.transaction_time, ti.location_id
FROM ransaction_item ti 
WHERE (_user <> true OR
       EXISTS (SELECT 1
               FROM user_location ul 
               WHERE ul.location_id = ti.location_id AND
                     ul.user_id = _user_id AND
                     ul.location_id = _location_id
              )
      ) AND
      ti.transaction_date BETWEEN _start_date::date AND _end_date::date AND
      ti.upc IS NOT NULL;

对我来说,“条件连接”似乎很难理解。但是,WHERE子句中的条件过滤器非常容易遵循。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60946446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档