您好我有一个存储用户信息的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
答案 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