我需要比较单个表中单个列的值。这是一个示例表:
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
答案 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'