0

好的,所以我正在尝试编写一个查询,该查询仅在它们位于同一列并与一个特定值相关联时才返回重复值。

例如,假设数据库中有 5 个苹果,但其中 1 个关联为“红色”,而另一个关联为“绿色”,则在选择仅具有一个关联的水果的查询中不会返回任何苹果。但是,如果在另一个数据库中有 4 个苹果并且它们都只与“红色”相关联,那么所有这些苹果都将在选择水果的查询中返回,并且只有一个关联。假设只有 2 个不同的值,红色和绿色。

所以我的查询看起来像这样:

SELECT Apples
FROM Fruits
WHERE Colour = 'RED' AND Colour NOT IN (SELECT Apples FROM Fruits WHERE Colour =    'GREEN')

我的查询没有运行或返回我需要的结果,我如何返回仅与单个值关联的值?

任何人都可以帮忙吗?

编辑:好吧,我没有使用有效的类比,我只是想获得仅与一个值相关联的值。检查我的评论以了解我使用的更好的类比

4

1 回答 1

1

我希望我正确理解您的问题,您想要返回所有水果(具有相同名称/标题)的列表,前提是只有一种颜色,否则您的结果中不需要任何颜色。

使用子查询这看起来有点脏,但这是我能在短时间内想出的最好的:

使用这个表结构:

CREATE TABLE Fruits (Id INT PRIMARY KEY auto_increment, Title VARCHAR(63), Colour VARCHAR(63));

INSERT INTO Fruits (Title, Colour)
  SELECT 'Apple', 'Green'
  UNION ALL
  SELECT 'Apple', 'Green'
  UNION ALL
  SELECT 'Apple', 'Blue'
  UNION
  SELECT 'Orange', 'Yellow'
  UNION ALL
  SELECT 'Orange', 'Yellow';

您可以执行此查询

SELECT
    Id
  FROM Fruits AS OuterFruits
  WHERE
    Title = 'Orange'
    AND
    (
      SELECT
          COUNT(Colour)
         FROM Fruits AS InnerFruits
         WHERE
          InnerFruits.Colour != OuterFruits.Colour
          AND InnerFruits.Title = OuterFruits.Title
    ) = 0;

这将给出插入的两个橙子的行,但是如果您在最后一个查询中替换为哪里,'Orange''Apple'将得到一个空的结果集,因为有不同颜色的苹果可用。

您也可以在此小提琴中在线尝试。

请注意,这是 mysql-syntax(因为您没有包含任何特殊的 sql 版本,但我很确定只有auto_incrementmysql-specific)

于 2013-09-11T10:20:40.757 回答