即使该数据不存在,也从其他表中提取数据

时间:2012-02-21 16:56:23

标签: crystal-reports

我要做的是从一个表中提取所有数据,然后如果数据在另一个表中可用,那么如果不只是显示N / A,则拉出该字段。

例如我有一个订单信息表

product code, description,qty ect

然后我有一张选择清单的表

(primary key)picking list number

但是在创建拣配清单编号之前必须接受订单。所以我想在订单表中显示所有信息,然后如果它们是一个拣货单号码显示,如果不只是显示N / A.

只是想知道那是否可能。

3 个答案:

答案 0 :(得分:2)

左外连接...应列出“左”表中的所有项目,以及右侧匹配连接条件的项目。

请记住,“记录选择”中的所有条件都适用于所有记录 - 如果您不小心,使用选择中“右”表中的字段可以将查询转换为INNER查询。

答案 1 :(得分:0)

我再也受不了了......对LOJ /“条件”评论的解释。

你有“ON”条件是LOJ的一部分。
您还有“WHERE”条件是整个查询的一部分。

之间存在很大差异
SELECT 
   PERSONS_NAME,
   PERSONS_ADDRESS,
   PERSONS_CITY, 
   PERSONS_STATE
FROM
  MYRECORDS MR
    LEFT OUTER JOIN
      MYDETAILS MD
        ON  MR.MYID = MD.MYID
WHERE
   NOT PERSONS_ADDRESS IS NOT NULL
   AND
   (some other wx clauses)

SELECT 
   PERSONS_NAME,
   PERSONS_ADDRESS,
   PERSONS_CITY, 
   PERSONS_STATE
FROM
  MYRECORDS MR
    LEFT OUTER JOIN
      MYDETAILS MD
        ON  MR.MYID = MD.MYID  
            AND   
            NOT PERSONS_ADDRESS IS NOT NULL
WHERE
   (some other wx clauses)

第一个将仅提供ADDRESS存在的记录...跳过仅存在PERSONS_NAME的记录。

第二个会为您提供所有PERSONS_NAME,但会在PERSONS_ADDRESS存在时包含地址信息。

上面这是一个很糟糕的例子,但它说明了这个问题:

如果在WHERE子句中使用RIGHT TABLE中的字段,则LOJ将等同于INNER JOIN - 丢失LOJ的值。

如果将条件添加到ON子句中,LOJ将作为LEFT OUTER JOIN运行,但仍然能够包含RIGHT TABLE中的SELECTED记录。

对于所有的CAPPED单词感到抱歉,但是已经很晚了,我的愿景很惨淡,我想要对某些东西施加压力。我现在忘了。

答案 2 :(得分:0)

遗憾的是,如果没有使用命令,Crystal Reports将不支持ON类型。最好的办法是命令或使用存储过程来获取数据。