首页 > 解决方案 > 仅当值存在于 SQL 的另一列中时,如何选择列的值?

问题描述

我有一个稍微复杂的问题。有几列。从本质上讲,逻辑是有一堆标题。每个标题都有一个唯一的标识符,它们是一个系列的一部分。正如“现在表”中明显的那样,有几个不同的哥布林:哥布林、哥布林 2 和哥布林 3。如果它们是不同的标题,它们具有单独的唯一标识符,但由于它们都是哥布林,因此它们具有唯一的系列标识符。这些头衔/生物可以有任何家。但索伦只拥有巢穴中的那些。

我想弄清楚的是,索伦拥有的东西与其他人拥有的其他东西相比,索伦所拥有的百分比是索伦独有的。因此,例如,吸血鬼是索伦唯一拥有的,因为没有其他人拥有它。如果 Sauron 拥有唯一的系列标识符,那么我想要它。

我想解决这个问题的方法是找到索伦拥有的一切。根据 Sauron 拥有的唯一系列标识符,我想找到表中的所有内容。目前唯一的系列标识符很少,所以很容易像唯一系列标识符 = 'Gob' 那样手动输入它,但是如果有很多,我该怎么做呢?我想找到 Sauron 拥有的所有东西以及 Sauron 也拥有的唯一系列标识符的所有匹配项。因此,不属于 Sauron 的怪物和巨魔之类的东西不存在。并想象这张桌子是一百万或更多,而不是一小组东西。

感谢您的帮助,并为这个词呕吐感到抱歉,想不出更好的方法来解释这一点!:D

要展示的示例表

标签: sqldatabaseamazon-redshift

解决方案


选择 Sauron 的所有唯一系列标识符。然后选择具有这些唯一系列标识符的所有标题。

select * from mytable 
where unique_series_identifier in 
(
  select unique_series_identifier
  from mytable
  where evil_lord = 'Sauron'
)
order by unique_series_identifier, unique_identifier;

我建议为此查询设置以下索引。一种是查找 Sauron 标题,另一种是按唯一系列标识符查找标题。

create index idx1 on mytable ( evil_lord, unique_series_identifier );
create index idx2 on mytable ( unique_series_identifier );

推荐阅读