首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用mysql 3联接查询获得完整数据

问无法使用mysql 3联接查询获得完整数据
EN

Stack Overflow用户
提问于 2019-08-06 07:42:17
回答 3查看 54关注 0票数 0

我在域表中有1500条记录,但是通过使用这个查询只能得到1215条记录。如何修改此查询以提供所需的结果和更好的性能

代码语言:javascript
复制
SELECT 
  d.id, d.domain_name, d.action, d.comment, d.agent_email, 
  d.assigned_date, d.added_date, dd.registered_on, dd.expiry_date,
  dd.updated_date, dd.acquire_price, dd.acquire_date, dd.email,
  dd.effective_price, dd.registrar, dd.status, dd.servers, 
  count(l.lead_domain), d.domainer_email, d.current_status, 
  d.undeveloped, d.sedo, d.afternic, d.flippa, d.uniregistry, 
  d.go_daddy, d.domr, d.minimum_offer, d.buy_it_now_price, 
  d.way_to_find_leads, dd.tlds_taken 
FROM domains d 
right join domains_data dd on d.domain_name=dd.domain_name 
left outer join lead_domains l on d.domain_name=l.domain_name 
  and d.domainer_email=l.domainer_email 
group by d.domain_name 
having d.action='all' and d.domainer_email='abc@gmail.com' 
order by d.added_date desc;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-06 08:09:41

@Harshal根据我的理解,我不认为您提供的查询会因为按规则分组不被适当遵守而起作用。

代码语言:javascript
复制
SELECT  d.id,
        d.domain_name,
        d.action,
        d.comment,
        d.agent_email,
        d.assigned_date,
        d.added_date,
        dd.registered_on,
        dd.expiry_date,
        dd.updated_date,
        dd.acquire_price,
        dd.acquire_date,
        dd.email,
        dd.effective_price,
        dd.registrar,
        dd.status,
        dd.servers,
        (SELECT COUNT(lead_domain) FROM lead_domains WHERE domain_name = d.domain_name AND domainer_email = d.domainer_email) AS lead_domain,
        d.domainer_email,
        d.current_status,
        d.undeveloped,
        d.sedo,
        d.afternic,
        d.flippa,
        d.uniregistry,
        d.go_daddy,
        d.domr,
        d.minimum_offer,
        d.buy_it_now_price,
        d.way_to_find_leads,
        dd.tlds_taken
FROM domains d
LEFT JOIN domains_data dd 
       ON d.domain_name = dd.domain_name
WHERE d.action = 'all'
      AND d.domainer_email = 'abc@gmail.com'
ORDER BY
    d.added_date DESC;

由于你没有提供任何预期的结果,我只是猜测我的解决方案会奏效。

票数 0
EN

Stack Overflow用户

发布于 2019-08-06 08:02:37

您的结果取决于domains_data表。

由于您正确地将domains加入到domains_data中,所以domains_data中的条目将被接受。如果您希望考虑domains的条目,请使用左联接,如下所示。

代码语言:javascript
复制
SELECT d.id, d.domain_name, d.action, d.comment, d.agent_email, d.assigned_date, d.added_date, dd.registered_on, dd.expiry_date, dd.updated_date, dd.acquire_price, dd.acquire_date, dd.email, dd.effective_price, dd.registrar, dd.status, dd.servers, COUNT(l.lead_domain), d.domainer_email, d.current_status, d.undeveloped, d.sedo, d.afternic, d.flippa, d.uniregistry, d.go_daddy, d.domr, d.minimum_offer, d.buy_it_now_price, d.way_to_find_leads, dd.tlds_taken
FROM domains d
LEFT JOIN domains_data dd ON d.domain_name=dd.domain_name
LEFT OUTER JOIN lead_domains l ON d.domain_name=l.domain_name AND d.domainer_email=l.domainer_email
GROUP BY d.domain_name
HAVING d.action='all' AND d.domainer_email='abc@gmail.com'
ORDER BY d.added_date DESC;

如果仍然无法获得所需的结果,请检查having条件。

票数 1
EN

Stack Overflow用户

发布于 2019-08-06 07:54:53

这是我的建议,在加入其他表格之前先过滤。

代码语言:javascript
复制
SELECT d.id
    ,d.domain_name
    ,d.action
    ,d.comment
    ,d.agent_email
    ,d.assigned_date
    ,d.added_date
    ,dd.registered_on
    ,dd.expiry_date
    ,dd.updated_date
    ,dd.acquire_price
    ,dd.acquire_date
    ,dd.email
    ,dd.effective_price
    ,dd.registrar
    ,dd.status
    ,dd.servers
    ,t1.cnt
    ,d.domainer_email
    ,d.current_status
    ,d.undeveloped
    ,d.sedo
    ,d.afternic
    ,d.flippa
    ,d.uniregistry
    ,d.go_daddy
    ,d.domr
    ,d.minimum_offer
    ,d.buy_it_now_price
    ,d.way_to_find_leads
    ,dd.tlds_taken 
FROM domains d 
inner join
    (select domain_name, count(1) as cnt 
        from domain
        where
            action='all' and domainer_email='abc@gmail.com'
        group by domain_name
     ) as t1 on t1.domain_name = d.domain_name
right join domains_data dd on d.domain_name=dd.domain_name 
left outer join lead_domains l on d.domain_name=l.domain_name and d.domainer_email=l.domainer_email 
order by d.added_date desc;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57371186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档