我有一个mysql表,名为 fruits
:
我想从列所在的表中选择行 fruit1
, fruit2
,和 fruit3
仅包含集合中的值 [apple, pear, melon]
即
只有 apple
只有 pear
只有 melon
只有两者都有 apple
以及 pear
只有两者都有 apple
以及 melon
只有两者都有 pear
以及 melon
只有 apple
, pear
以及 melon
对于我的示例数据,行将 1, 5, 8
.
我尝试了以下查询:
SELECT * FROM fruits WHERE 'apple' in (fruit1, fruit2, fruit3)
给了我所有包含 apple
在一个 fruit
柱。但是,我不知道如何过滤多个列。
2条答案
按热度按时间tzxcd3kk1#
我的假设是
fruit
表中的值是NULL
. 在这种情况下,此查询将为您提供所需的结果:输出
如果空白值只是空字符串,则将查询更改为
在dbfiddle上演示
iszxjhcz2#
理想解决方案:
您可以通过创建两个表来规范化它。第一张table是
id
以及area
.第二张table是
area_id
(fk从area_master
表),attribute
,value
,attribute_order
:现在,获取数据的查询将如下所示,您不需要每次都更改它,因为您添加了新的结果:-)
p、 s:可能会有更多的改进,比如添加外键约束等,但我希望您能理解要点。
原始问题:
使用
Where
我们只考虑那些至少有一个果列的行apple
,pear
,或melon
现在,我们做一个Group By
上id
,并使用Having
忽略果列不是空的行,它们的值不是空的apple
,pear
,和melon
.请尝试以下操作:
p、 这是个糟糕的设计。每当有n个类似的列时,就应该考虑对其进行规范化。