php - 保存 SELECT 结果以在另一个 SELECT 中重用
问题描述
有什么方法可以将 SQL 请求的结果不保存为数组,而是保存为表对象,以便在其他 SQL 请求中重复使用?
比如让我保存请求的结果(books tagged with 'c++')
SELECT BOOK
FROM BOOK_TAGS
WHERE TAG = 'C++';
然后,为了选择带有“c++”和“gamedev”标签的书,我不想再次滚动所有 BOOK_TAGS 表,我想从以前保存的结果中选择它们
就像是
SELECT BOOK
FROM $TAGGED JOIN BOOK_TAGS USING(BOOK)
WHERE TAG = 'gamedev';
解决方案
我在评论中陷入了 XY 问题,但是当我看到其他一些答案时,我重新考虑了这个问题:
如果您的目标是退回所有带有两个标签的书籍...
SELECT book
FROM book_tags
WHERE tag in ('C++', 'gamedev')
GROUP BY Book
HAVING count(Distinct tag) =2
注意:我使用 distinct 以防一本书的标签可以重复;如果表设计防止此类重复,则不应使用 distinct。
或者:
- 根据第一个查询创建视图
- 创建一个包含结果的表格(这样结果不会像在视图中那样改变
.
Create table RandomKey as (
SELECT BOOK
FROM BOOK_TAGS
WHERE TAG = 'C++');
然后稍后
SELECT BOOK
FROM randomkey JOIN BOOK_TAGS USING(BOOK)
WHERE TAG = 'gamedev';
但我不喜欢像这样动态改变结构。
推荐阅读
- javascript - 读取 UL 中的所有内容并显示在警告框中
- python - 在while循环中添加到熊猫df
- javascript - 如何在 index.js 放置脚本中将图像并排添加?
- mongodb - $and 在 $match MongoDB 中
- spring - Java Spring Batch 中的 ETL 与 Apache Spark 基准测试
- javascript - 如何正确转义 JSON.stringify 中的引号?
- ios - 为什么 Xcode 控制台打印约束歧义警告但 UI 调试器不打印?
- python - re.error: missing ),通过 pip 安装时位置 0 处的未终止子模式
- php - 匹配斜线分隔字符串中的大括号包裹字符
- javascript - 如何使用一个字符串作为参数执行具有两个参数的函数?