我在phpmyadmin数据库中有一个SQL表,它有8列。我想检查其中的4个(特定的4列)是否等于某个值。例如,假设值为“abcd”,列名为:c1 c2 c5 c8
我试着做这个查询:SELECT * FROM table_name t WHERE 'abcd' IN (t.c1, t.c2, t.c5, t.c8)
问题是,即使4列中有一列是“abcd”,我也会得到一个行结果,但我希望条件只有在所有4列都是“abcd”时才为真。
我也试着读了ANY
和ALL
,但我不认为它会工作。
当然,我可以将WHERE
子句写成t.c1 = 'abcd' AND t.c2 = 'abcd'
等等……但是我想要一个简短的方式(如果可能的话),而不是多次写入值“abcd”。
如何编写此查询?
4条答案
按热度按时间cnwbcb6i1#
如果只想关注四列(c1、c2、c5和c8)为“abcd”,并排除任何其他列,则需要使用IN运算符将元组(t.c1、t.c2、t.c5、t.c8)与元组('abcd'、'abcd'、'abcd'、'abcd')进行比较。如果列中的所有四个值都与元组中的相应值匹配,则将返回该行。
| C1| C2| C3|碳四|C5| C6| C7| C8| c8 |
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----| ------------ |
| 阿拉伯基督教民主联盟|阿拉伯基督教民主联盟|艾克尔|欧洲铁路公司|阿拉伯基督教民主联盟|欧洲植物生长联合会|欧洲植物生长联合会|阿拉伯基督教民主联盟| abcd |
fiddle
mec1mxoz2#
下面是一个只需要写一次'abcd'的解决方案:
另一个解决方案要求你写两次'abcd',不管列表中有多少列:
如果任何一个列都是NULL,那么它们就不可能都等于'abcd'。
这些解决方案并不像您要求的那样使用
IN()
predicate ,但它们非常简单明了。zf2sa74q3#
听起来是个奇怪的要求。通常人们更关心的是性能和效率,而不是做某事的具体方法。
但是...
串联我们关心的领域;用空集替换每个,检查空集。我猜它会返回一个假阳性,如果所有这些字段都是“空集”最初虽然…
dbfIDDLE
6vl6ewon4#
不如
您可能需要使用
+
或||
,具体取决于您的特定数据库。