我要做的是从一个表中提取所有数据,然后如果数据在另一个表中可用,那么如果不只是显示N / A,则拉出该字段。
例如我有一个订单信息表
product code, description,qty ect
然后我有一张选择清单的表
(primary key)picking list number
但是在创建拣配清单编号之前必须接受订单。所以我想在订单表中显示所有信息,然后如果它们是一个拣货单号码显示,如果不只是显示N / A.
只是想知道那是否可能。
答案 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类型。最好的办法是命令或使用存储过程来获取数据。