【问题标题】:MySQL select column if it existsMySQL 选择列(如果存在)
【发布时间】:2014-01-11 10:20:33
【问题描述】:

我进行了以下查询,但是当我尝试再选择一列时,我没有得到任何结果。我只是不知道如何选择该列(if 语句是有问题的)。

问题是cash_payment_detail 表中的sub_acc 列也可以是null。任何帮助都意义重大。请注意,我还在学习中。

SELECT
     LPAD(cash_payments_detail.`control_acc`,5,0) AS Control_Account,
     CAccountDescription As Control_Account_Name,
     LPAD(cash_payments_detail.`sub_acc`,4,0) AS Sub_Account,
     **if (coasub.`SAccountNo` = cash_payments_detail.`sub_acc`, coasub.`SAccountDescription`," ") As Sub_Account_Name**
FROM
    coasub, coacontrol, `cash_payments_detail` cash_payments_detail INNER JOIN `cash_payments` cash_payments ON cash_payments_detail.`cpvno` = cash_payments.`cpvno`
WHERE
control_acc = coacontrol.`CAccountNo`

【问题讨论】:

  • 粗体 (**) 列未显示在您的查询中。
  • 哎呀对不起,它带有**,if语句的那个​​
  • 1) 你必须使用OUTER JOIN 例如LEFT JOIN 2) 不要混合逗号样式和ANSI样式JOINs
  • 感谢您的指导,无法与您一起解决。

标签: mysql if-statement exists


【解决方案1】:

您的问题在于您是否必须在编写此类查询之前很好地学习连接,并注意您编写的连接在以下情况下不会返回记录 cash_payment_detail.sub_acc 为空 左连接将返回空值;) 使用 left Join 而不是 inner join... 试试这个查询:

SELECT
cash_payments.cpvno AS Voucher_Number, date_format(cash_payments.vdate,'%d %M %Y') AS Voucher_Date,
sec_users.name AS Entered_By, cash_payments.payto AS Payment_To, cash_payments.payref AS On_Account_Of, LPAD(cash_payments.branch,5,0) AS Cash_Control_Account, branches.cash_control_name AS Cash_Control_Name,
branches.name AS Branch_Name,
LPAD(cash_payments_detail.control_acc,5,0) AS Control_Account, CAccountDescription As Control_Account_Name,
LPAD(cash_payments_detail.sub_acc,4,0) AS Sub_Account, if (SAccountNo = sub_acc, SAccountDescription," ") As Sub_Account_Name,
cash_payments_detail.job_no AS Job, cash_payments_detail.narration AS Narration, cash_payments_detail.debit AS Debit
FROM
coasub, coacontrol, branches, sec_users, cash_payments_detail cash_payments_detail 
LEFT JOIN cash_payments cash_payments ON cash_payments_detail.cpvno = cash_payments.cpvno 
WHERE
control_acc = coacontrol.CAccountNo AND cashcontrol = cash_payments.branch AND cash_payments.login = sec_users.login

【讨论】:

  • 感谢您的回复。对此,我真的非常感激。我尝试了左连接,甚至完全删除了连接并使用了 where 子句但没有运气 编辑:没关系,我想通了,混合了连接。感谢您的帮助。
猜你喜欢
  • 2020-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 2014-10-24
相关资源
最近更新 更多