簡體   English   中英

比較同一列中的兩個值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM