查询期间忽略Mysql左Join语句

查询期间忽略Mysql左Join语句,mysql,left-join,Mysql,Left Join,我有一个很长的MySql查询,其中有很多过滤器,可以将结果缩小到我需要的一小部分答案。以下是目前正在使用的查询: SELECT o.offer_id, o.external_cat, o.cat, o.shop, o.item_id, o.live FROM ourson_offerattributes_new oa1 JOIN ourson_offerattributes_new oa2 ON oa1.offer_id=oa2.offer_id AND oa1.attribute_id

我有一个很长的MySql查询,其中有很多过滤器,可以将结果缩小到我需要的一小部分答案。以下是目前正在使用的查询:

SELECT o.offer_id, o.external_cat, o.cat, o.shop, o.item_id, o.live
FROM ourson_offerattributes_new oa1
JOIN ourson_offerattributes_new oa2 ON oa1.offer_id=oa2.offer_id
    AND oa1.attribute_id = 'most_recent_status'
JOIN ourson_offerattributes_new oa3 ON oa2.offer_id=oa3.offer_id
    AND oa3.attribute_id = oa2.value AND oa3.value ='OK'
JOIN ourson_offer_new o ON (o.offer_id = oa3.offer_id
    AND cat IN (5051511,5051512,5051513,5051514,5051507,5051508,5051509,5051510,5051505,5051506,5051500,5051501,5051502,5051503,5060402))
LEFT JOIN ourson_offerattributes_new oa4 ON oa3.offer_id=oa4.offer_id
    AND oa4.attribute_id='status_ltu_indexer' AND oa4.value='OK' AND oa3.offer_id IS NULL
LEFT JOIN ourson_offer_new oa5 ON oa3.offer_id=oa5.offer_id
    AND oa5.cat IS NULL AND oa5.cat IN (5070101,7030100,2020205,2020202)
当我使用它时,这个查询可以工作,但是我注意到我的
左JOIN
子句中有一个被完全忽略了,我可以在其中放置任何过滤器,MySQL只是忽略了它,我似乎不知道为什么,因为没有出现错误

这是被忽略的行:

LEFT JOIN ourson_offerattributes_new oa4 ON oa3.offer_id=oa4.offer_id
    AND oa4.attribute_id='status_ltu_indexer' AND oa4.value='OK' AND oa3.offer_id IS NULL

有人能帮我解决这个问题吗?

您不能使用算术比较运算符,例如=,问题可能在于以下部分:

AND oa3.offer_id IS NULL
LEFT JOIN ourson_offer_new oa5 ON oa3.offer_id=oa5.offer_id
    AND oa5.cat IS NULL AND oa5.cat IN (5070101,7030100,2020205,2020202)
由于
JOIN
用于将
oa3
连接到结果集,因此它从不为
NULL
bea

更新#1:

请替换查询的以下部分:

LEFT JOIN ourson_offerattributes_new oa4 ON oa3.offer_id=oa4.offer_id
    AND oa4.attribute_id='status_ltu_indexer' AND oa4.value='OK' AND oa3.offer_id IS NULL
关于这一点:

INNER JOIN ourson_offerattributes_new oa4 ON oa3.offer_id=oa4.offer_id
    AND oa4.attribute_id='status_ltu_indexer' AND oa4.value='OK' 

也请考虑更换部分:

AND oa3.offer_id IS NULL
LEFT JOIN ourson_offer_new oa5 ON oa3.offer_id=oa5.offer_id
    AND oa5.cat IS NULL AND oa5.cat IN (5070101,7030100,2020205,2020202)
与:

INNER JOIN ourson_offer_new oa5 ON oa3.offer_id=oa5.offer_id
    AND oa5.cat IN (5070101,7030100,2020205,2020202)

但是我需要测试
oa4.offer\id
是否存在于
oa3
结果集中,我该怎么做?我需要测试
oa4.offer\id
是否存在于
oa3
结果集中,我认为
为NULL
语句就是在这里测试这个。。。我如何继续?我会尽力帮助你,但是你能告诉我这个查询是你亲手写的还是通过一些可视化编辑器生成的吗?你能解释一下,为什么你需要知道
oa4.offer\u id
是否存在于
oa3
中?原因是什么?很快-如果结果不存在,是否要缩小范围?或者干脆不加入它?所以基本上,我用
oa3
来知道哪些条目适合继续,然后我用
oa4
oa3
中存在的每个条目应用一个新的过滤器。完成后,我希望获得通过最后一个过滤器的所有条目(例如:具有
属性\u id
s
值的
offer\u id
,在查询的其余部分将不会返回
“OK”
),请试着看看它对你的案子是否有效。当做