簡體   English   中英

SQL查詢未顯示所需結果

[英]SQL query not displaying the desired result

我有這個查詢工作正常。 沒有錯誤或任何錯誤。 但這似乎不適用於最后一部分,也不會填充contact_data cd的最后三個字段。

 select c.*,cd.* FROM
 (select * from
 (select con.id_contact as v,substr(concat(ifnull(con.firstname,''),ifnull(con.lastname,'')),1,4) as s0, null as s1, null as s2
 from contact con where id_user=123 and firstname != '' and firstname != ' ' and firstname is not null) as tbl235768 where 1=1 AND v IN
 (select v from
   (select * from
      (select con.id_contact as v,substr(concat(ifnull(con.firstname,''),ifnull(con.lastname,'')),1,4) as s0, null as s1, null as s2
      from contact con where id_user=123 and email = '') as tbl235770 where 1=1) as tblAnd) AND v IN
      (select v from
          (select * from (select con.id_contact as v,substr(concat(ifnull(con.firstname,''),ifnull(con.lastname,'')),1,4) as s0, null as s1, null as s2
          from contact con where id_user=123 and mobile != '' and mobile != ' ' and mobile is not null) as tbl235772 where 1=1) as tblAnd)) as tblBucket
          left join contact c on c.id_contact=v left join
          (select id_contact, group_concat(name) as custom_names,group_concat(value) as custom_values FROM contact_data where
          id_user=20 group by id_contact) as cd on cd.id_contact=c.id_contact group by (c.id_contact)

但是,如果我只運行最后一部分,則如下

 select id_contact, group_concat(name) as custom_names,group_concat(value) as custom_values 
 FROM contact_data where id_user=798 group by id_contact

它給了我想要的結果。 我的查詢出了什么問題? 任何幫助將不勝感激,謝謝。

編輯:我正在得到一些答案后編輯我的問題。

我刪除了所有嵌套部分,但仍然沒有運氣。

select c.*,cd.* FROM (select * from (select con.id_contact as v,substr(concat(ifnull(con.firstname,''),ifnull(con.lastname,'')),1,4) as s0,  null as s1, null as s2 from contact con where id_user=10879) as tbl235785
where 1=1) as tblBucket  left join contact c on c.id_contact=v left join  (select  id_contact, group_concat(name) as custom_names,group_concat(value) as     custom_values 
FROM contact_data where id_user=798 group by id_contact) as cd on cd.id_contact=c.id_contact group by (c.id_contact)

這是使您的SQL更簡單的方法:

所有1 = 1和SELECT * FROM(子查詢)都可以消失-它們什么也不做。 這樣邏輯就會變得很清楚-您只需要在where語句上有一些附加子句即可,而不是子查詢。 我認為,當像這樣進行清理時,您可以看到-在第一個選擇中您具有id_user=123 ,在第二個中您具有id_user=20

可能希望它們相同嗎? 您甚至不需要第二個聯接的select中的where子句。 由於已聯接,因此您只需要將該字段的值聯接到外部查詢中即可。

select c.*,cd.* 
FROM (select con.id_contact as v,substr(concat(ifnull(con.firstname,''),ifnull(con.lastname,'')),1,4) as s0, null as s1, null as s2
        from contact con 
        where id_user=123 and 
              firstname != '' and firstname != ' ' and firstname is not null
          and 
            email = ''
              OR
            (
               mobile != '' and mobile != ' ' and mobile is not null
            )  
      ) as tbl235768 
left join contact c on c.id_contact=v 
left join (select id_contact, group_concat(name) as custom_names,group_concat(value) as custom_values
           FROM contact_data 
           where id_user=20 
           group by id_contact
          ) as cd on cd.id_contact=c.id_contact 
group by (c.id_contact)

在一個地方,您要在id_user = 10879中進行匹配,然后在不同的子查詢中,您在id_user = 798進行匹配,然后將兩者相結合,並且由於id_user字段都在查找不同的數字,因此在聯接中沒有匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM