[英]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.