[英]mysql search in main query and subquery
在嘗試在查詢中搜索以下查詢時,我可能編寫了錯誤的語法,但不確定如何更正它。 我也想在主表和子查詢表中搜索文本。
這是我的查詢
select mytable.*
from mytable
where spam = 0
and deleted = 0
and draft = 0
and (subject like '%guss%' or body like '%guss%' or
(select CONCAT(users.firstname,' ', users.lastname) as fname,users.email
from users where firstname like '%guss%' or lastname like 'guss'))
and id = 24
order by id desc
得到這個錯誤
[Err] 1241 - Operand should contain 1 column(s)
更新#1
select mytable.*
from mytable
where spam = 0
and deleted = 0
and draft = 0
and (subject like '%eli%' or body like '%eli%' or
(select users.firstname
from users where firstname like '%eli%') or
(select users.lastname
from users where lastname like '%eli%'))
and id_receiver = 24
order by id desc
這里的錯誤:
(select CONCAT(users.firstname,' ', users.lastname) as fname,users.email
from users where firstname like '%guss%' or lastname like 'guss'))
在子查詢中,您只能返回一列
這是第一列: CONCAT(users.firstname,' ', users.lastname) as fname
這是第二列: users.email
您將2列結果作為OR表達式的操作數。 這會導致問題。 它應該返回一列或與某物進行比較。 但是,如果您想在兩個表中都進行搜索,我想您將需要UNION。
雖然我認為這是錯誤的,但我不認為mytable.id與users.id有關,但這就是評論所說的...
SELECT Distinct mytable.*
FROM mytable
INNER JOIN users
on myTable.ID = users.Id
WHERE mytable.spam = 0
and mytable.deleted = 0
and mytable.draft = 0
and CONCAT_WS(mytable.subject, mytable.body, users.firstname, users.lastname) like '%eli%'
and mytable.id_receiver = 24
ORDER BY mytable.id desc
我刪除了或使用字符串串聯。 我們想要任何在主題,正文,名字,姓氏列中具有“ eli”文本的記錄。 系統將必須遍歷每列以檢查%eli%值。 理論上最多4個循環。 通過將所有列加在一起形成一個字符串並檢查eli,我們消除了引擎必須在字符串連接的開銷下進行的額外循環。 這應該更快。
我使用了distinct,因為我不知道想要什么結果,以及聯接是否會導致沒有目的的多個記錄。 由於使用了*,因此我不能正確地使用分組。
我加入了用戶,假設您只希望mytable中的記錄可以鏈接到用戶。 這可能是錯誤的假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.