mysql,在一组数据中水平存储数据时如何查找唯一行

时间:2018-09-08 10:31:08

标签: mysql mysqli

我正在将数据存储在用户个人资料中

var Mark = {
  firstName: 'Mark',
  lastName: 'Wielstra',
  mass: 78,
  height: 1.69,
  calculateBMI: function() {
    this.bmi = this.mass / (this.height * this.height);
    return this.bmi;
  }
}

从上面的示例中可以看到,我正在水平存储数据。

因此,用户ID 1,2和4具有网站。但是,用户ID 3没有网站。

现在,当我编写查询时。说,表名是foo

userid | field_title | field_value
1      |   fname     |  JD1
1      |   lname     |  JD1
1      |   website   |  www.JD 
2      |   fname     |  JD2
2      |   lname     |  JD2
2      |   website   |  www.JD2
3      |   fname     |  JD3
3      |   lname     |  JD3
4      |   fname     |  JD4
4      |   lname     |  JD4
4      |   website   |  www.JD

它将全部归还给我4。

我如何编写查询以仅获取3个?

3 个答案:

答案 0 :(得分:0)

如果您的表中有主键,请尝试在这里 id

two aggregates

答案 1 :(得分:0)

基本上,您需要寻找条目中field_title'website'的用户。这可以通过NOT EXISTS子句来实现:

SELECT *
FROM foo f1
WHERE NOT EXISTS (SELECT *
                  FROM foo f2
                  WHERE field_title = 'website' AND f1.userid = f2.userid)

输出:

userid  field_title     field_value
3       fname           JD3
3       lname           JD3

答案 2 :(得分:0)

假设您有一个名为user的表,该表每行存储一个用户,您可以这样做:

SELECT u.id from user u 
LEFT JOIN user_attributes ua 
 ON (u.id = ua.id AND ua.field_title='website')
WHERE ua.field_title IS NULL

由于LEFT JOIN保证每个用户至少有noe行,无论ON子句是否匹配,而ON子句与您不需要的东西匹配,然后有一个WHERE子句,其中通常不是NULL的一个字段被过滤为NULL,将与用户3返回一行。