mysql - MySQL Multiple JOINS 至少有一个 LIKE 包含一个值
问题描述
我们有表格页面,如果我们想在 pages.uid = tableX.pid 上加入 4 个不同的表格,并且我们只想要这些结果,例如 tableX.ext_url 匹配 LIKE。我已经编写了以下查询,但它仍然返回值是所有 'LIKE' 值都是空的 - 结果是很多结果
SELECT pages.uid, pages.title, tt_news.ext_url, tt_content.bodytext, tx_mask_facts.tx_mask_link, tx_mask_links.tx_mask_link FROM pages
LEFT JOIN tt_news ON pages.uid = tt_news.pid AND tt_news.ext_url LIKE '%//media.%' AND tt_news.deleted <> 1 AND tt_news.hidden <> 1
LEFT JOIN tt_content ON pages.uid = tt_content.pid AND tt_content.bodytext LIKE '%//media.%' AND tt_content.deleted <> 1 AND tt_content.hidden <> 1
LEFT JOIN tx_mask_facts ON pages.uid = tx_mask_facts.pid AND tx_mask_facts.tx_mask_link LIKE '%//media.%' AND tx_mask_facts.deleted <> 1 AND tx_mask_facts.hidden <> 1
LEFT JOIN tx_mask_links ON pages.uid = tx_mask_links.pid AND tx_mask_links.tx_mask_link LIKE '%//media.%' AND tx_mask_links.deleted <> 1 AND tx_mask_links.hidden <> 1
WHERE
pages.deleted <> 1 AND pages.hidden <> 1
GROUP BY pages.uid;
我怎样才能做到这一点?
另一个尝试:
SELECT pages.uid, pages.title FROM pages
LEFT JOIN tt_news ON pages.uid = tt_news.pid
LEFT JOIN tt_content ON pages.uid = tt_content.pid
LEFT JOIN tx_mask_facts ON pages.uid = tx_mask_facts.pid
LEFT JOIN tx_mask_links ON pages.uid = tx_mask_links.pid
WHERE
pages.deleted <> 1 AND pages.hidden <> 1
AND
tt_news.deleted <> 1 AND tt_news.hidden <> 1
AND
tt_content.deleted <> 1 AND tt_content.hidden <> 1
AND
tx_mask_facts.deleted <> 1 AND tx_mask_facts.hidden <> 1
AND
tx_mask_links.deleted <> 1 AND tx_mask_links.hidden <> 1
AND
tt_news.ext_url LIKE '%media.%'
AND
tt_content.bodytext LIKE '%media.%'
AND
tx_mask_facts.tx_mask_link LIKE '%media.%'
AND
tx_mask_links.tx_mask_link LIKE '%media.%'
GROUP BY
pages.uid;
和另一个尝试:
SELECT pages.uid, pages.title, tt_news.ext_url, tt_content.bodytext, tx_mask_facts.tx_mask_link, tx_mask_links.tx_mask_link FROM pages
LEFT JOIN tt_news ON pages.uid = tt_news.pid AND tt_news.ext_url LIKE '%//media.%' AND tt_news.deleted <> 1 AND tt_news.hidden <> 1
LEFT JOIN tt_content ON pages.uid = tt_content.pid AND tt_content.bodytext LIKE '%//media.%' AND tt_content.deleted <> 1 AND tt_content.hidden <> 1
LEFT JOIN tx_mask_facts ON pages.uid = tx_mask_facts.pid AND tx_mask_facts.tx_mask_link LIKE '%//media.%' AND tx_mask_facts.deleted <> 1 AND tx_mask_facts.hidden <> 1
LEFT JOIN tx_mask_links ON pages.uid = tx_mask_links.pid AND tx_mask_links.tx_mask_link LIKE '%//media.%' AND tx_mask_links.deleted <> 1 AND tx_mask_links.hidden <> 1
WHERE
pages.deleted <> 1 AND pages.hidden <> 1
AND
tt_news.ext_url IS NOT NULL
AND
tt_content.bodytext IS NOT NULL
AND
tx_mask_facts.tx_mask_link IS NOT NULL
AND
tx_mask_links.tx_mask_link IS NOT NULL
GROUP BY pages.uid;
仍然没有成功
按照建议:
SELECT pages.uid, pages.title, tt_news.ext_url, tt_content.bodytext, tx_mask_facts.tx_mask_link, tx_mask_links.tx_mask_link FROM pages
LEFT JOIN tt_news ON pages.uid = tt_news.pid AND tt_news.ext_url LIKE '%//media.%' AND tt_news.deleted <> 1 AND tt_news.hidden <> 1 AND tt_news.pid IS NOT NULL
LEFT JOIN tt_content ON pages.uid = tt_content.pid AND tt_content.bodytext LIKE '%//media.%' AND tt_content.deleted <> 1 AND tt_content.hidden <> 1 AND tt_content.pid IS NOT NULL
LEFT JOIN tx_mask_facts ON pages.uid = tx_mask_facts.pid AND tx_mask_facts.tx_mask_link LIKE '%//media.%' AND tx_mask_facts.deleted <> 1 AND tx_mask_facts.hidden <> 1 AND tx_mask_facts.pid IS NOT NULL
LEFT JOIN tx_mask_links ON pages.uid = tx_mask_links.pid AND tx_mask_links.tx_mask_link LIKE '%//media.%' AND tx_mask_links.deleted <> 1 AND tx_mask_links.hidden <> 1 AND tx_mask_links.pid IS NOT NULL
WHERE
pages.deleted <> 1 AND pages.hidden <> 1
GROUP BY pages.uid;
但结果还是一样
最终查询 - 工作示例:
SELECT pages.uid, pages.title, tt_news.ext_url, tt_content.bodytext, tx_mask_facts.tx_mask_link, tx_mask_links.tx_mask_link FROM pages
LEFT JOIN tt_news ON pages.uid = tt_news.pid AND tt_news.ext_url LIKE '%//media.%' AND tt_news.deleted = 0 AND tt_news.hidden = 0
LEFT JOIN tt_content ON pages.uid = tt_content.pid AND tt_content.bodytext LIKE '%//media.%' AND tt_content.deleted = 0 AND tt_content.hidden = 0
LEFT JOIN tx_mask_facts ON pages.uid = tx_mask_facts.pid AND tx_mask_facts.tx_mask_link LIKE '%//media.%' AND tx_mask_facts.deleted = 0 AND tx_mask_facts.hidden = 0
LEFT JOIN tx_mask_links ON pages.uid = tx_mask_links.pid AND tx_mask_links.tx_mask_link LIKE '%//media.%' AND tx_mask_links.deleted = 0 AND tx_mask_links.hidden = 0
WHERE
pages.deleted <> 1 AND pages.hidden <> 1 AND (tt_news.ext_url IS NOT NULL OR tt_content.bodytext IS NOT NULL OR tx_mask_facts.tx_mask_link IS NOT NULL OR tx_mask_links.tx_mask_link)
GROUP BY pages.uid;
所以问题是在 where 子句之后缺少 AND 与 LIKE 值上的嵌套 OR)
对不起我的英语不好
解决方案
这将起作用:
编写另一个条件检查AND tableX.pid IS NOT NULL
推荐阅读
- json - 带有 Spring RestTemplate 的可选嵌套 JSON 对象
- python - 来自 pyinstaller 的 python 可执行文件的问题
- python - AWS Chalice,无法从 POST 请求中获取图像
- node.js - BigQuery NodeJs 库 - 访问 Google Drive 中的外部源时出错
- python - 熊猫计算特定索引的值更改次数
- react-native - keyboardType (name-phone-pad) - React Native
- html - 为什么我不能抓取里面的数据
- 标签
- linux - 在 Linux 中使用 --enable-libxcb 构建 FFMPEG
- go - How to call a method in Golang from a different package
- replication - 我有哪种一致性模型?