比较同一列中的两个值

时间:2015-06-08 18:39:30

标签: mysql sql

我需要比较单个表中单个列的值。这是一个示例表:

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 green和violet应返回null。

到目前为止,我有以下SQL,但它并不完全是我想要的,特别是使用限制1.我正在寻找单个查询来返回Cat字段而不使用限制1。

SELECT Cat
From foo
WHERE 
Color = 'maroon'
and
Color = 'orange'
LIMIT 1

5 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

答案 1 :(得分:2)

除了Beginner's answer之外,如果没有GROUP_CONCAT,我们可以解决这个问题:

SELECT cat
FROM foo
WHERE color IN ('maroon', 'orange')
GROUP BY cat
HAVING COUNT(*) = 2
;

这可以通过选择具有指定颜色的所有猫来实现。当我们对它们进行分组时,多次出现的猫(HAVING子句)是您要保留的记录。

注意:使用HAVING子句的数字应与您要搜索的颜色数量相匹配。

答案 2 :(得分:0)

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和更具体的操作。

答案 3 :(得分:0)

使用try: # for Python2 from Tkinter import * except ImportError: # for Python3 from tkinter import * class Injector(): def __openInjector(self): root = Tk() root.geometry('600x400') root.title('Toontown Rewritten Injector') root.resizable(False, False) def __init__(self): self.code = '' self.__openInjector() def runInjectorCode(self): exec(self.code.get(1.0, 'end'), globals()) def __openInjector(self): root = Tk() root.geometry('600x400') root.title('Toontown Rewritten Injector') root.resizable(False, False) frame = Frame(root) self.code = Text(frame, width=70, height=20) self.code.pack(side='left') Button(root, text='Inject!', command=self.runInjectorCode).pack() scroll = Scrollbar(frame) scroll.pack(fill='y', side='right') scroll.config(command=self.code.yview) self.code.config(yscrollcommand=scroll.set) frame.pack(fill='y') Injector() 子句

尝试这样做
GROUP BY

答案 4 :(得分:0)

您需要在表的主键(也称为自联接)上自己加入表。

试试这个:

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'
相关问题