选择符合条件的一列

时间:2012-03-31 09:14:08

标签: mysql sql

我有这样的表:

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%'的名称, 问题是我永远不知道要准确选择哪一行,我不想全部选择它们。 此表中的人是作者。关于书籍,流派等的标题也有专栏。 我只想在书籍的作者中搜索。

感谢您的帮助......

3 个答案:

答案 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%'