这是期望的结果:
sr no. | fullname | email
----------------------------------------
1. | demo user | demo@test.com
2. | sagar panchal | sagar@gmail.com
我试过了:
SELECT *
FROM `ds_tbl_event_question` q
LEFT JOIN `ds_tbl_event_participant` p ON q.event_id = p.event_id
AND p.question_id = q.event_question_id
LEFT JOIN `ds_events` e ON e.event_id = q.event_id
WHERE (
q.field_type = 'email'
OR q.field_type = 'full_name'
)
AND e.store_code = 'H9OCEN'
LIMIT 0 , 30
这给出了输出,如下图所示:
答案 0 :(得分:2)
似乎只有字段created_date
将您要从中获取full_name
和email
的记录联系在一起。鉴于此,您可以按此created_date
进行分组,并使用聚合函数(例如min
)仅考虑answer
- 具有特定field_type
- 值的记录的值:
select
min(CASE field_type WHEN 'full_name' THEN answer ELSE NULL END) as 'fullname',
min(CASE field_type WHEN 'email' THEN answer ELSE NULL END) as 'email'
FROM `ds_tbl_event_question` q
LEFT JOIN `ds_tbl_event_participant` p ON q.event_id = p.event_id AND p.question_id = q.event_question_id
LEFT JOIN `ds_events` e ON e.event_id = q.event_id
WHERE (
q.field_type = 'email'
OR q.field_type = 'full_name'
)
AND e.store_code = 'H9OCEN'
group by created_date
请注意,聚合函数(此处为:min
)是必需的,因为select-clause不能包含除group by子句中列出的属性之外的其他属性,除非在聚合函数中使用。
在上面的查询中,我尝试尽可能少地调整您的查询。实际上可以进一步缩短查询:当您在左侧值使用WHERE
条件时,左连接实际上变成了连接;并且field_type
上的条件是多余的,因为case
- 语句根本不考虑任何其他值:
select
min(CASE field_type WHEN 'full_name' THEN answer ELSE NULL END) as 'fullname',
min(CASE field_type WHEN 'email' THEN answer ELSE NULL END) as 'email'
FROM `ds_tbl_event_question` q
JOIN `ds_tbl_event_participant` p ON q.event_id = p.event_id AND p.question_id = q.event_question_id
JOIN `ds_events` e ON e.event_id = q.event_id AND e.store_code = 'H9OCEN'
group by created_date
答案 1 :(得分:1)
尝试这样的事情:
SELECT full_names.answer AS full_name,
emails.answer AS email FROM
(SELECT created_date
FROM ds_tbl_event_question
GROUP BY created_date) created_dates
JOIN
(SELECT created_date, answer
FROM ds_tbl_event_question
WHERE field_type = 'full_name') full_names
ON full_names.created_date = created_dates.created_date
JOIN
(SELECT created_date, answer
FROM ds_tbl_event_question
WHERE field_type = 'email') emails
ON emails.created_date = created_dates.created_date
请参阅Rextester演示:http://rextester.com/OBQ69221
答案 2 :(得分:1)
似乎关联的唯一方法是创建日期:
选择q.answer作为全名, (从ds_tbl_event_question中选择答案,其中field_type =' email'和created_date = q.created_date)作为电子邮件 来自ds_tbl_event_question q其中q.field_type =' full_name';