我有这样的表:
ID Name_1 Name_2 Name_3
1 Egon Spengler Ives Dertway Blade Ketlump
2 Mac Taylor Jedidiah Buckbolt Sarah Connor
3 Sarah Connor Modesto Slowfell Jean-Luc Picard
4 Jean-Luc Picard Beulah Cuxpan Henry Jones
5 Ellen Ripley Adeline Finkdell Ives Dertway
6 James T. Kirk Bertram Cam Mac Taylor
7 Henry Jones Vidal Matton Bertram Cam
所有三列中都没有相同的名称,因此不会发生这种情况:
3 Sarah Connor Sarah Connor Sarah Connor
我想只选择一个满足条件LIKE ='%value%'的名称, 问题是我永远不知道要准确选择哪一行,我不想全部选择它们。 此表中的人是作者。关于书籍,流派等的标题也有专栏。 我只想在书籍的作者中搜索。
感谢您的帮助......
答案 0 :(得分:2)
您的数据结构化方式可以做到
SELECT [row info you need]
FROM `table`
WHERE Name_1 LIKE '%value%'
OR Name_2 LIKE '%value%'
OR Name_3 LIKE '%value%'
或者使用全文索引(您需要先创建索引):
SELECT [row info you need]
FROM `table`
WHERE MATCH( names ) AGAINST ( 'value' )
显然,使用其中任何一个都不会告诉你哪个列匹配了。
但是你最好像这样重新设计你的模式
table
-----
id
[other info]
names
-----
id
name
tables_names
------------
table_id
name_id
这样你就可以做一个简单的INNER JOIN并避免使用单独的OR子句,并且你可以很容易地告诉哪个值与你的查询匹配。
答案 1 :(得分:1)
试试这个:
SELECT
IF (
Name_1 LIKE '%value%',
Name_1,
IF (
Name_2 LIKE '%value%',
Name_2,
IF (
Name_3 LIKE '%value%',
Name_3,
NULL
)
)
) AS `Name`
FROM
Table_Name
WHERE
Name_1 LIKE '%value%' OR Name_2 LIKE '%value%' OR Name_3 LIKE '%value%'
答案 2 :(得分:0)
如果没有重构表的结构,你就无法做多少,唯一可行的方法是:
SELECT * FROM table WHERE Name_1 LIKE '%xx%' or Name_2 LIKE '%xx%' OR Name_3 LIKE '%xx%'