如何创建在整个表而不是单列中搜索的Select语句?

时间:2011-01-17 11:51:37

标签: sql

我在数据库表中有5列。

列名称为:英语,法语,德语,西班牙语,俄语。

我想创建select语句,在整个表中搜索一个单词(包括所有列),而不是只搜索一列,例如:

select * from language
where English = "Parrot"

上述查询仅在“英语”栏中搜索“Parrot”一词。

我想要一个select语句,在所有列中搜索“Parrot”。

我该怎么做?

5 个答案:

答案 0 :(得分:1)

您需要对表格进行取消操作,然后定期进行搜索

答案 1 :(得分:0)

我认为你没有比普通or

更好的东西
Select * from language where English = "Parrot" or French = "Parrot" or German = "Parrot"

否则,您可以将单个翻译移动到单独的表中。因此,language中的一行不会有五个严格设置的列,而是language_word表中的五个(或任何其他数量)关联行。

答案 2 :(得分:0)

简单的解决方案是:

Select * from language where English = "Parrot"
OR French = "Parrot"
OR German = "Parrot"
OR Spanish = "Parrot"
OR Russian = "Parrot"

此解决方案可能缺乏可扩展性。如果您计划通过添加新列来扩展表,则可以编写自己的函数来执行搜索。

Here是一个示例存储过程,它在整个数据库中搜索指定的关键字,对您来说可能很有趣。

答案 3 :(得分:0)

OR旁边(我刚爱上find_in_set

select 
find_in_set('Parrot', 
  concat(English, ',', French, ',', German, ',', Spanish, ',', Russian)
) as pos
from language
having pos<>0

pos可以指出哪种语言与搜索字词匹配。

然而,规范化是更好的解决方案

答案 4 :(得分:0)

MySQL不是AFAIK非常擅长优化OR,如果你决定在将来添加新语言,那么使用这种方法你的解决方案将不会很容易维护。

我肯定会将表格结构更改为标准化表格。