MYSQL Pivots关键字搜索

时间:2018-03-09 06:08:17

标签: mysql sql pivot-table

您好我有一个存储用户信息的mysql表,该表的每一行都存储一列数据。

这是一个数据样本

dataId    FieldName    FieldData
63        SJMID        CP345223
63        Username     CP345223
63        email        test@test.com
63        Name         Danny Younes

以下是pivot SQL

SELECT 
  sso2.dataId, 
  MAX(IF(sso2.fieldName = 'SJM ID', sso2.fieldData, NULL)) AS 'SJM ID' , 
  MAX(IF(sso2.fieldName = 'Username', sso2.fieldData, NULL)) AS 'Username' , 
  MAX(IF(sso2.fieldName = 'Email', sso2.fieldData, NULL)) AS 'Email',
  MAX(IF(sso2.fieldName = 'Name', sso2.fieldData, NULL)) AS 'Name'
FROM
  users_table sso2
  GROUP BY sso2.dataId

数据按如下方式返回给我:

dataId    SJMID    Username    Email          Name
63        CP345223 CP345223    test@test.com  Danny Younes

当我在查询中输入关键字搜索时,让我们说我在每个字段中搜索数字522,返回以下数据:

 dataId    SJMID    Username    Email   Name
    63     CP345223 CP345223    NULL    NULL

它只返回它找到结果的数据,并返回null。我希望查询返回用户的所有数据。我一直在讨论这个问题,我使用了Case语句,它们似乎可以工作但是在一个非常大的数据库上的性能很糟糕。

以下是使用关键字搜索

的查询
SELECT 
      sso2.dataId, 
      MAX(IF(sso2.fieldName = 'SJM ID', sso2.fieldData, NULL)) AS 'SJM ID' , 
      MAX(IF(sso2.fieldName = 'Username', sso2.fieldData, NULL)) AS 'Username' , 
      MAX(IF(sso2.fieldName = 'Email', sso2.fieldData, NULL)) AS 'Email',
      MAX(IF(sso2.fieldName = 'Name', sso2.fieldData, NULL)) AS 'Name'
    FROM
      users_table sso2
    WHERE
      sso2.fieldData COLLATE UTF8_GENERAL_CI LIKE '%522%'
    GROUP BY 
      sso2.dataId

那么如何找回匹配关键字搜索的用户的所有数据

先谢谢 Danny Younes

1 个答案:

答案 0 :(得分:0)

在这种情况下,您需要根据 dataId

执行SELF JOIN
SELECT 
      sso2.dataId, 
      MAX(IF(u.fieldName = 'SJMID', u.fieldData, NULL)) AS 'SJM ID' , 
      MAX(IF(u.fieldName = 'Username', u.fieldData, NULL)) AS 'Username' , 
      MAX(IF(u.fieldName = 'Email', u.fieldData, NULL)) AS 'Email',
      MAX(IF(u.fieldName = 'Name', u.fieldData, NULL)) AS 'Name'
FROM users_table sso2
INNER JOIN users_table u on u.dataId = sso2.dataId
WHERE sso2.fieldData COLLATE UTF8_GENERAL_CI LIKE '%522%'
GROUP BY sso2.dataId