如何使用mysql在where子句中搜索垂直表

时间:2015-12-27 19:22:07

标签: mysql

我需要你的帮助,我是新手使用垂直表,我正在寻找现在使用WHERE子句搜索表 当field = 1表示某个值时。

结果是意外的,字段返回NULL值,以查找此link

中的结果

以下是创建表格的代码:

CREATE TABLE yourtable 
(`userid` varchar(100), `field` varchar(200), `data` varchar(100));

INSERT INTO yourtable
(`userid`, `field`, `data`)
VALUES
('1', '4', 'Blank'),
('2', '4', 'Blank'),
('1', '1', 'Amani'),
('1', '2', 'Engineering'),
('1', '3', 'Cairo'),
('2', '1', 'Adel'),
('2', '2', 'Engineering'),
('2', '3', 'Cairo');

给出意外结果的查询

select
userid,
MAX(CASE WHEN field=1 THEN data ELSE NULL END) AS Name,
MAX(CASE WHEN field=2 THEN data ELSE NULL END) AS Faculty,
MAX(CASE WHEN field=3 THEN data ELSE NULL END) AS University,
MAX(CASE WHEN field=4 THEN data ELSE NULL END) AS Place_Status
FROM yourtable
WHERE data='Amani'
GROUP BY userid;

我相信你可以知道为什么会发生这种情况,并且如果有任何其他方式来实现搜索而不使用where子句,欢迎

1 个答案:

答案 0 :(得分:2)

您可以按以下方式编写查询:

select
  userid,
  MAX(CASE WHEN field=1 THEN data END) AS Name,
  MAX(CASE WHEN field=2 THEN data END) AS Faculty,
  MAX(CASE WHEN field=3 THEN datL END) AS University,
  MAX(CASE WHEN field=4 THEN data END) AS Place_Status
FROM
  yourtable
WHERE
  userid IN (SELECT userid from yourtable where data='Amani')
GROUP BY userid;

由于where子句,您的查询将返回所有空值 - 只会选择以下行:

('1', '1', 'Amani')