mySQL - 在SELECT子句的subselect中使用外部SELECT值

时间:2015-01-29 16:45:24

标签: mysql

我有这个问题:

SELECT c.id, p.id, p.register_date, o.office_agency_name_1, a.street_address, a.supplemental_address_1, a.city, s.abbreviation, co.iso_code, a.postal_code, ph.phone, pf.phone, e.email,
ab.name, c.addressee_custom, (Select phone from civicrm_phone where contact_id = civicrm_contact.id  AND is_billing = 1) as billing_phone 

FROM   civicrm_contact c,
   civicrm_participant p,
   civicrm_value_office_info_1 o, 
   civicrm_address a,
   civicrm_state_province s, 
   civicrm_country co,
   civicrm_phone ph, 
   civicrm_phone pf,

   civicrm_email e,          
   civicrm_address ab



WHERE  p.contact_id = c.id
  AND  p.is_test    = 0
  AND  p.event_id = 1 
  AND  p.status_id NOT IN (4,11,12)
  AND  ( c.is_deleted = 0 OR c.is_deleted IS NULL )
  AND  o.entity_id = c.id
  AND  a.contact_id = c.id
  AND  s.id = a.state_province_id 
  AND  co.id = a.country_id 
  AND  ph.contact_id = c.id 
  AND  ph.is_primary = 1 
  AND  pf.contact_id = c.id 
  AND  pf.phone_type_id = 3
  AND  e.contact_id = c.id 
  AND  e.is_primary = 1
  AND  ab.contact_id = c.id
  AND  ab.is_billing = 1 

billing_phone是最近添加的...这当然不起作用并给我:

1054 - 未知专栏' civicrm_contact.id'在' where子句'

由于复杂性以及还有更多字段需要添加的事实,我希望尽可能避免使用JOIN,并尽可能接近当前语法。

当我尝试使用与其他手机相同的模式添加结算手机时,很明显并非所有人都拥有结算手机 - 行数急剧下降。

我希望将这项工作作为外部SELECT中的子查询(对于那些没有结算电话的行,我会得到NULL,对吧?)。

实际上,它也不能作为JOIN工作:

SELECT c.id, p.id, p.register_date, o.office_agency_name_1, a.street_address, a.supplemental_address_1, a.city, s.abbreviation, co.iso_code, a.postal_code, ph.phone, pf.phone, e.email,
ab.name, c.addressee_custom, pb.phone as billing_phone 

FROM   civicrm_contact c,
       civicrm_participant p,
       civicrm_value_office_info_1 o, 
       civicrm_address a,
       civicrm_state_province s, 
       civicrm_country co,
       civicrm_phone ph, 
       civicrm_phone pf,

       civicrm_email e,          
       civicrm_address ab

LEFT JOIN civicrm_phone as pb on pb.contact_id = c.id  AND pb.is_billing = 1 

WHERE  p.contact_id = c.id
  AND  p.is_test    = 0
  AND  p.event_id = 1 
  AND  p.status_id NOT IN (4,11,12)
  AND  ( c.is_deleted = 0 OR c.is_deleted IS NULL )
  AND  o.entity_id = c.id
  AND  a.contact_id = c.id
  AND  s.id = a.state_province_id 
  AND  co.id = a.country_id 
  AND  ph.contact_id = c.id 
  AND  ph.is_primary = 1 
  AND  pf.contact_id = c.id 
  AND  pf.phone_type_id = 3
  AND  e.contact_id = c.id 
  AND  e.is_primary = 1
  AND  ab.contact_id = c.id
  AND  ab.is_billing = 1

这让我:

1054 - 未知栏' c.id'在' on条款'

我如何使这项工作?

1 个答案:

答案 0 :(得分:0)

出现的是别名表" c" (指的是civicrm_contact)没有列" id"在它。

您确定此列中是否存在此列?