如果事件表中有条目,我试图使用以下查询获取两个事件。
SELECT * FROM (
SELECT
e.*
FROM
events e
WHERE
e.id= 654321
AND e.sub_type_id = 78
AND e.type_id = 230
AND e.cid = 123
UNION ALL
SELECT
e1.*
FROM
events e1
WHERE
e1.id< 654321
AND e1.sub_type_id = 78
AND e1.type_id = 230
AND e1.cid = 123
) as sub
ORDER BY id DESC
LIMIT 2;
此查询适用于第二个事件输入等等,因为我得到两个记录但是对于第一个事件,我想要problem_description所以我修改了查询,如下所示 -
SELECT * FROM (
SELECT
e.*,
rd.problem_description
FROM
events e
JOIN request_details rd ON( rd.cid = e.cid AND rd.request_id = e.data_reference_id)
WHERE
e.id= 654321
AND e.sub_type_id = 78
AND e.type_id = 230
AND e.cid = 123
UNION ALL
SELECT
e1.*,
rd1.problem_description
FROM
events e1
JOIN request_details rd1 ON( rd1.cid = e1.cid AND rd1.request_id = e1.data_reference_id)
WHERE
e1.id< 654321
AND e1.sub_type_id = 78
AND e1.type_id = 230
AND e1.cid = 123
) as sub
ORDER BY id DESC
LIMIT 2;
我对应该使用哪种类型的连接感到困惑,因为对于第一个条目,数据库中没有任何记录事件,但是有一个记录为problem_description。
答案 0 :(得分:0)
如果您可以使用UNION ALL
,那么e1.data_reference_id <= 654321
似乎毫无用处。
另外,如果记录总是存在于右表request_details中,有时甚至存在于事件表中,我认为你所需要的只是一个正确的联接。
select e.*,
r.problem_description
from events e
right join request_details r on e.cid = e.cid
and r.request_id = e.data_reference_id
where e.data_reference_id <= 654321
and e.sub_type_id = 78
and e.type_id = 230
and e.cid = 123
order by e.id desc limit 2;