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