Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
Mysql 合适的子句返回值,该值为null且不为null,但其他值有错误_Mysql_Sql - Fatal编程技术网

Mysql 合适的子句返回值,该值为null且不为null,但其他值有错误

Mysql 合适的子句返回值,该值为null且不为null,但其他值有错误,mysql,sql,Mysql,Sql,我尽量简化我的问题。用户需要根据批处理id从数据库中进行选择(有多种类型的事务) 使用下面的查询不会返回所有事务。应返回116行,但仅返回115行。缺少一行的原因是因为to\u acct\u no列值无效。这意味着当事务发生时,用户键入了错误的账号。我的查询不包括以下条件:从帐户编号或到帐户编号无效。需要建议使用哪种方法 已使用NULL,但仍然返回相同的结果,因为列中有值,但值不正确 Table Batch_id | From_acct_no | to_acct_no 61619 |

我尽量简化我的问题。用户需要根据批处理id从数据库中进行选择(有多种类型的事务)

使用下面的查询不会返回所有事务。应返回116行,但仅返回115行。缺少一行的原因是因为to\u acct\u no列值无效。这意味着当事务发生时,用户键入了错误的账号。我的查询不包括以下条件:从帐户编号到帐户编号无效。需要建议使用哪种方法

已使用NULL,但仍然返回相同的结果,因为列中有值,但值不正确

Table

Batch_id | From_acct_no  | to_acct_no
 61619   |  001102125698 |  01278965321
 61619   |  001103568965 |  013052542
查询

SELECT a.batch_id, 
       a.effective_dt, 
       a.from_acct_no, 
       e.title_1, 
       b.iso_code AS 'from_currency', 
       a.from_crncy, 
       a.to_crncy, 
       a.to_acct_no, 
       f.title_1, 
       c.iso_code AS 'to_currency', 
       a.to_posted_amt, 
       a.status, 
       a.rej_reason, 
       d.short_text, 
       a.from_description, 
       a.from_amt, 
       a.batch_tran_id, 
       d.error_text 
FROM   gb_batch_tfr_trans a, 
       ad_gb_crncy b, 
       ad_gb_crncy c, 
       pc_ov_error d, 
       dp_acct e, 
       ln_acct f 
WHERE  a.from_crncy = b.crncy_id 
       AND a.to_crncy = c.crncy_id 
       AND d.error_id =* a.rej_reason 
       AND a.status IN ( 'rejected' ) 
       AND ( a.from_acct_no = e.acct_no 
              OR a.from_acct_no IS NULL 
                 AND e.acct_no IS NULL ) 
       AND ( a.to_acct_no = f.acct_no 
              OR a.to_acct_no IS NULL 
                 AND f.acct_no IS NULL ) 
       AND a.batch_id = 61619 
添加了代码(我根据给定的答案遵循了代码的结构)


我认为问题可能是您正在使用表“dp_acct”和“ln_acct”的内部联接。 尝试:


它起作用了!!非常感谢。但我尝试将此代码用于另一个帐户(总账帐户)并使其成为联合。但它返回重复值。我需要更多信息来回答您的问题。我不明白你所说的会计是什么意思。您可以编辑问题以包含下一个问题或创建新问题。如果您有重复的记录,可能您正在使用“UNION ALL”运算符。然后省略“ALL”关键字。您也可以阅读有关联接的内容。我将代码添加到原始答案中。但我遵循给定答案的结构。我已经省略了“全部”,但仍然返回了副本。实际上,我需要合并代码以满足五个条件。1)dp_acct和ln_acct 2)gl_acct和gl_acct 3)gl_acct和dp_acct 4)gl_acct和ln_acct 5)dp_acct和gl_acct。当用户输入任何批次id时,它将选择与批次id匹配的条件。我尝试合并前两个条件,结果返回重复。非常感谢您的帮助
 union      
 SELECT a.batch_id, 
   a.effective_dt, 
   a.from_acct_no, 
   e.description, 
   b.iso_code AS 'from_currency', 
   a.from_crncy, 
   a.to_crncy, 
   a.to_acct_no, 
   f.description, 
   c.iso_code AS 'to_currency', 
   a.to_posted_amt, 
   a.status, 
   a.rej_reason, 
   d.short_text, 
   a.from_description, 
   a.from_amt, 
   a.batch_tran_id, 
   d.error_text 
FROM   gb_batch_tfr_trans a
INNER JOIN ad_gb_crncy b ON a.from_crncy = b.crncy_id
INNER JOIN ad_gb_crncy c ON a.to_crncy = c.crncy_id 
LEFT OUTER JOIN pc_ov_error d ON  a.rej_reason = d.error_id
LEFT OUTER JOIN gl_acct e ON a.from_acct_no = e.acct_no
LEFT OUTER JOIN gl_acct f ON a.to_acct_no = f.acct_no
WHERE a.status IN ( 'rejected' ) 
   AND a.batch_id = 61619 
SELECT a.batch_id, 
       a.effective_dt, 
       a.from_acct_no, 
       e.title_1, 
       b.iso_code AS 'from_currency', 
       a.from_crncy, 
       a.to_crncy, 
       a.to_acct_no, 
       f.title_1, 
       c.iso_code AS 'to_currency', 
       a.to_posted_amt, 
       a.status, 
       a.rej_reason, 
       d.short_text, 
       a.from_description, 
       a.from_amt, 
       a.batch_tran_id, 
       d.error_text 
FROM   gb_batch_tfr_trans a
INNER JOIN ad_gb_crncy b ON a.from_crncy = b.crncy_id
INNER JOIN ad_gb_crncy c ON a.to_crncy = c.crncy_id 
LEFT OUTER JOIN pc_ov_error d ON  a.rej_reason = d.error_id
LEFT OUTER JOIN dp_acct e ON a.from_acct_no = e.acct_no
LEFT OUTER JOIN ln_acct f ON a.to_acct_no = f.acct_no
WHERE a.status IN ( 'rejected' ) 
       AND a.batch_id = 61619