好的,所以我正在尝试编写一个只返回重复值的查询,如果它们在同一列中并与一个特定值相关联。
例如说,数据库中有5个苹果,但其中1个与“红色”关联,而另一个为“绿色”,在选择只有一个关联的水果的查询中,不会返回任何苹果。但是,如果另一个数据库中有4个苹果,并且所有这些苹果只与“红色”相关联,那么所有这些苹果都会在选择只有一个关联的水果的查询中返回。假设只有2个不同的值,红色和绿色。
所以我的查询看起来像这样:
SELECT Apples
FROM Fruits
WHERE Colour = 'RED' AND Colour NOT IN (SELECT Apples FROM Fruits WHERE Colour = 'GREEN')
我的查询没有运行或返回我需要的结果,我如何返回仅与单个值相关联的值?
任何人都可以帮忙吗?
编辑:好吧我没有使用有效的类比,我只是想获得只与一个值相关的值。检查我的评论,看看我用过的更好的比喻
答案 0 :(得分: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'
,则会得到一个空的结果集,因为苹果有不同的颜色可用。
您也可以在此fiddle在线尝试。
请注意,这是mysql-syntax(因为你没有包含任何特殊的sql版本,但我非常确定只有auto_increment
是特定于mysql的)