首页 > 解决方案 > 保存 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'; 

标签: phpmysqlsql

解决方案


我在评论中陷入了 XY 问题,但是当我看到其他一些答案时,我重新考虑了这个问题:

如果您的目标是退回所有带有两个标签的书籍...

SELECT book
FROM book_tags
WHERE tag in ('C++', 'gamedev')
GROUP BY Book
HAVING count(Distinct tag) =2 

注意:我使用 distinct 以防一本书的标签可以重复;如果表设计防止此类重复,则不应使用 distinct。

或者:

  1. 根据第一个查询创建视图
  2. 创建一个包含结果的表格(这样结果不会像在视图中那样改变

.

Create table RandomKey as (
SELECT BOOK 
 FROM BOOK_TAGS
 WHERE TAG = 'C++');

然后稍后

SELECT BOOK 
FROM randomkey JOIN BOOK_TAGS USING(BOOK)
WHERE TAG = 'gamedev'; 

但我不喜欢像这样动态改变结构。


推荐阅读