Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL结果集长度因连接而异_Sql_Postgresql_Outer Join - Fatal编程技术网

PostgreSQL结果集长度因连接而异

PostgreSQL结果集长度因连接而异,sql,postgresql,outer-join,Sql,Postgresql,Outer Join,环境是:PostgreSQL 9.3 我有这样一个要求: SELECT DISTINCT orders.id AS count, orders.state AS state, coalesce(discounts.amount, 0) AS discount, CASE WHEN (order_logs.id IS NULL) THEN 0 ELSE 1 END

环境是:PostgreSQL 9.3

我有这样一个要求:

SELECT
  DISTINCT
  orders.id                      AS count,
  orders.state                   AS state,
  coalesce(discounts.amount, 0)  AS discount,
  CASE WHEN (order_logs.id IS NULL) THEN 0
  ELSE 1 END                     AS attempted,
  CASE WHEN (order_logs_1.id IS NULL) THEN 0
  ELSE 1 END                     AS processed,

-- the following 2-by-2 lines are comment-swapped
--   users.name                     AS "group",
--   order_logs_2.operator_id       AS group_raw
  goods.name                     AS "group",
  goods.id                       AS group_raw
FROM
  orders
  LEFT OUTER JOIN
  order_logs
    ON
      order_logs.order_id = orders.id
      AND
      order_logs.state <= 1999
      AND
      order_logs.state != 1000
  LEFT OUTER JOIN
  order_logs AS order_logs_1
    ON
      order_logs_1.order_id = orders.id
      AND
      order_logs_1.state <= 1999
      AND
      order_logs_1.state != 1000
      AND
      (order_logs_1.flags & 1) > 0
  LEFT OUTER JOIN
  discounts
    ON
      discounts.user_id = orders.user_id
      AND
      discounts.goods_id = orders.goods_id

--the following 2 joins refer to the first commented-out lines in SELECT expression list
--   LEFT OUTER JOIN
--   order_logs AS order_logs_2
--     ON
--       order_logs_2.order_id = orders.id
--       AND
--       order_logs_2.state IN (
--         1999,
--         1100,
--         1150,
--         1151,
--         1003,
--         1202,
--         1203,
--         1200,
--         1201,
--         1002
--       )
--       AND
--       (order_logs_2.flags & 1 > 0)
--   LEFT OUTER JOIN
--   users
--     ON
--       users.id = order_logs_2.operator_id
  -- this join refers to the last 2 lines in expression list
  LEFT OUTER JOIN
  goods
      ON
          goods.id = orders.goods_id
WHERE
  orders.ts_spawn >= 1414789200
  AND
  orders.ts_spawn < 1417381200
ORDER BY "count"

然后排除相应的JOIN子句,最后一个被注释掉,但没有成功。

请发布两个显示意外行为的最小查询。您写了关于更改分组和更改联接表的内容,但不清楚您到底更改了什么;将在A中多次显示那些在B中有多个可连接行的行。这样,左连接将增加结果行的数量。SQL查询中的注释显示了应如何更改。当前表单按商品分组。当我更改按运算符\u id分组时,我注释掉SELECT表达式中的最后两行,注释掉最后一个左外部联接,但取消注释已注释的SELECT表达式行,取消注释已注释的两个左外部联接。对于这种情况下的重复行,在“JOIN on”表达式上有多个关系:在第一个选定列上有DISTINCT,该列是基本查询表的PK,也没有简化对“minimal”的查询,因为这并不明显,简化后的表单将显示我的查询的真正功能。有时,当一个人试图混淆他的代码,然后寻求帮助时,唯一的反应就是“给我看代码!”。示例中使用的DISTINCT将删除重复的行。如果您想在一列上使用它,您应该编写不同的ONorders.id
order_logs_2.operator_id       AS "group",
order_logs_2.operator_id       AS group_raw