[英]Compare Two Values in Same Column
我需要比较单个表中单个列的值。 这是一个示例表:
ID Cat Color ====================== 1 red maroon 2 red orange 3 red pink 4 blue violet 5 blue purple 6 blue indigo 7 green puke green 8 green hunter green
我从Color列中获得了2种颜色。 我需要知道它们是否属于同一个Cat列。 例如,我将获得栗色和橙色。 我需要返回红色值。 紫罗兰色和紫色应该返回蓝色。 Puke绿色和紫色应该返回null。
到目前为止,我有以下SQL但它并不是我正在寻找的,特别是对于限制1.我正在寻找单个查询来返回Cat字段而不使用限制1。
SELECT Cat From foo WHERE Color = 'maroon' and Color = 'orange' LIMIT 1
你可以试试这个:
SELECT x.cat
FROM (
SELECT cat, GROUP_CONCAT(color) AS colors
FROM tablename
GROUP BY cat) AS x
WHERE FIND_IN_SET('maroon', x.colors) > 0
AND FIND_IN_SET('orange', x.colors) > 0
编辑1:另一种选择
SELECT IF(
FIND_IN_SET('maroon', GROUP_CONCAT(color)) > 0
AND FIND_IN_SET('orange', GROUP_CONCAT(color)) > 0 , cat, NULL
) AS cat
FROM tablename
GROUP BY cat
除了初学者的答案 ,没有GROUP_CONCAT
可以解决这个问题:
SELECT cat
FROM foo
WHERE color IN ('maroon', 'orange')
GROUP BY cat
HAVING COUNT(*) = 2
;
这可以通过选择具有指定颜色的所有猫来实现。 当我们对它们进行分组时,多次出现的猫( HAVING
子句)是您要保留的记录。
注意:使用HAVING
子句的数字应与您要搜索的颜色数相匹配。
DECLARE @Cat varchar(50) = null
select @Cat = Cat
from foo f1
JOIN foo f2 on f1.Cat = f2.Cat
where f1.Color = 'maroon'
and f2.Color = 'orange'
select @Cat
理想情况下,您应该有一个关联的颜色表,以便您可以执行JOIN和更具体的位置。
使用GROUP BY
子句尝试这样
select case when count(*) > 0 then cat else NULL end as MyCat_Column
from (
select Cat
from table1
where color in ('maroon','orange')
group by cat
having count(distinct color) >= 2
) tab;
您需要在表的主键(也称为自联接)上自己加入表。
试试这个:
SELECT A.Cat
From foo A, foo B
WHERE
A.ID = B.ID
and A.Cat = B.Cat and
A.Color = 'maroon'
and
B.Color = 'orange'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.