Я пытаюсь пересечь эти запросы. Я собираюсь иметь от двух пересекающихся запросов до пяти пересекающихся запросов.Как пересечь несколько запросов с помощью MYSQL?
select * from Main
left join title_keyword_link on Main.id = title_keyword_link.title_id
left join keywords_master on title_keyword_link.keyword_id = keywords_master.id
where keywords_master.keyword = 'opinion'
INTERSECT
select * from Main
left join title_keyword_link on Main.id = title_keyword_link.title_id
left join keywords_master on title_keyword_link.keyword_id = keywords_master.id
where keywords_master.keyword = 'sports'
я узнал, что MYSQL не поддерживает INTERSECT, поэтому я попробовал некоторые из предложенных альтернатив. Я пробовал:
select * from Main
left join title_keyword_link on Main.id = title_keyword_link.title_id
left join keywords_master on title_keyword_link.keyword_id = keywords_master.id
where keywords_master.keyword in ('opinion', 'sports')
^Это показывает результаты, которые больше похожи на UNION мнений и спорта
Я также попытался:
select keywords from Main
left join title_keyword_link on Main.id = title_keyword_link.title_id
left join keywords_master on title_keyword_link.keyword_id = keywords_master.id
where keywords_master.keyword = 'sports'
and keywords_master.keyword in (select keywords from Main
left join title_keyword_link on Main.id = title_keyword_link.title_id
left join keywords_master on title_keyword_link.keyword_id = keywords_master.id
where keywords_master.keyword = 'opinion')
^Этот код вызывает MySQL Workbench к сбою.
Спасибо! Этот ответ будет ценным, поскольку я пересекаю больше ключевых слов. И быстрее! – Sedrick
Для нетривиальных множеств с подходящими индексами, доступными для таблиц, оба запроса должны быть * намного быстрее, чем операция объединения на две (или более) производные таблицы. Кроме того, если это были мои запросы, я бы заменил «SELECT m. *» На список конкретных выражений, которые будут возвращены ... например. 'SELECT m.id, m.title, LEFT (m.foo, 40) AS foo FROM'. – spencer7593