簡體   English   中英

在主查詢和子查詢中進行mysql搜索

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

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