[英]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.