簡體   English   中英

選擇滿足條件的一列

[英]SELECT one column where condition is met

我有這樣的表:

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%'的名稱,問題是我不知道確切選擇哪一行,也不想全部選擇。 該表中的人是作者。 也有關於書名,體裁等的專欄。 我只想搜索書籍作者。

謝謝您的幫助...

數據結構化的方式就可以做到

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子句,並且可以很容易地確定哪個值與查詢匹配。

嘗試這個:

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

如果不重構表的結構,您將無法做很多事情,唯一可能的方法是:

SELECT * FROM table WHERE Name_1 LIKE '%xx%' or Name_2 LIKE '%xx%' OR Name_3 LIKE '%xx%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM