[英]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.