查询期间忽略Mysql左Join语句
我有一个很长的MySql查询,其中有很多过滤器,可以将结果缩小到我需要的一小部分答案。以下是目前正在使用的查询:查询期间忽略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
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”
),请试着看看它对你的案子是否有效。当做