将两个 SQL 查询的结果作为一个结果集获取

问题描述 投票:0回答:1

我的数据位于一张表中,但该表具有分层数据,如下所示。下面也是我想要从表中获取的数据的混淆转储。

以下是与我的问题相关的源数据。

+-----+---------+-----------------+-----------+
| id  | item_id | item_inherit_id | item_name |
+-----+---------+-----------------+-----------+
|  26 |      46 |               0 | Item 26   |
|  87 |     230 |               0 | Item 87   |
| 435 |     870 |               0 | Item 435  |
| 440 |     876 |            1563 | Item 440  |
| 469 |     907 |               0 | Item 469  |
| 475 |     913 |             942 | Item 475  |
| 483 |     942 |               0 | Item 483  |
| 680 |    1516 |               0 | Item 680  |
| 689 |    1563 |               0 | Item 689  |
+-----+---------+-----------------+-----------+

这是表格的结构。

| table | CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `item_id` int(11) DEFAULT '0',
  `item_inherit_id` int(11) DEFAULT '0',
  `item_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `faction` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `points` int(11) NOT NULL DEFAULT '0',
  `has_reward` int(11) NOT NULL DEFAULT '0',
  `completed` enum('No','Yes') COLLATE utf8_unicode_ci DEFAULT 'No',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6692 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |

我想要从表中获得的数据是

has_reward
字段设置为 1 且
completed
设置为“否”的所有项目。在满足该条件的所有项目中,我想对任何存储在
item_id
中的
item_inherit_id
的项目进行额外搜索。

主查询将返回我想要的部分内容,循环查询是我想与循环查询合并的内容,可能使用联合或子查询。

主要查询:

 SELECT `id`, `item_name` 
 FROM `table` 
 where faction IN ('A', 'Both', '') 
 AND `has_reward` = 1 AND `completed` = "No" AND `points` <> 0

循环查询:

 SELECT `id`, `item_name` 
 FROM `table` 
 WHERE faction IN ('A', 'Both', '') 
 AND `item_inherit_id` = %d;
sql mysql join subquery union
1个回答
0
投票

您可以使用单个 SQL 查询来完成此操作,该查询使用 JOIN 将主查询与循环查询组合起来。

SELECT 
    t1.`id`, 
    t1.`item_name` 
FROM 
    `table` AS t1
LEFT JOIN 
    `table` AS t2 ON t1.`item_id` = t2.`item_inherit_id`
WHERE 
    t1.`faction` IN ('A', 'Both', '') 
    AND t1.`has_reward` = 1 
    AND t1.`completed` = 'No' 
    AND t1.`points` <> 0
    AND (t2.`id` IS NOT NULL OR t1.`item_inherit_id` = 0);
   
© www.soinside.com 2019 - 2024. All rights reserved.