MySQL:选择按另一列中具有公共值的列分组的所有条目

时间:2018-04-23 11:48:30

标签: mysql sql database

我有以下表格帖子:

id | user_id | post_title | is published
1    9332      some title   0
2    2133      some title   1
3    9332      some title   0
4    2133      some title   1
5    4555      some title   0
6    4555      some title   1
7    3221      some title   0
8    3221      some title   0

我的目标: 查找具有相同user_id并且没有单一条目"的所有条目已发布" = 1。

因此,我必须获得id为1,3,7和8 =>的条目。这些是到目前为止没有任何单一发布帖子的用户条目。

查询会是什么样的?

EXTENDED:

这里可以找到一个小提琴:

  

http://sqlfiddle.com/#!9/b58fb3/1/0

此外,我创建了表2.我的目标是只显示用户的表1条目,表2中没有链接条目。所以我的目标是在执行查询后仅表1条目保留ID 1和3(仅用户9332条目)。

5 个答案:

答案 0 :(得分:1)

试试这个:

// ...

catch (Exception e)
{
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    e.printStackTrace(new PrintStream(out));
    String str = new String(out.toByteArray());

    System.out.println(str);
}

答案 1 :(得分:0)

您可以使用SELECT t.* FROM t WHERE NOT EXISTS (SELECT 1 FROM t t2 WHERE t2.user_id = t.user_id AND t2.is_published = 1 );

{{1}}

对于您的示例,所有用户至少有两个条目。此查询将返回具有一个未发布条目的用户。目前尚不清楚这是否可取。如果没有,修改查询非常简单。

答案 2 :(得分:0)

使用嵌套查询:

SELECT T1.*
FROM
Table1 T1
INNER JOIN
(
SELECT user_id,COUNT(*) AS CNT
FROM TABLE1 
GROUP BY user_id
) T2
ON T1.user_id=T2.user_id
INNER JOIN
(
SELECT user_id,COUNT(*) AS CNT FROM Table1
WHERE `is published` = 0
GROUP BY user_id
) T3
ON T2.user_id=T3.user_id
AND T2.CNT=T3.CNT
WHERE T1.user_id
NOT IN (
        SELECT T1.user_id
        FROM Table1 T1
        INNER JOIN Table2 T2
        ON T1.id=T2.table1_id
       )

或使用联接:

id  user_id post_title  is published
1   9332    some title  0
3   9332    some title  0

<强>输出

<tr ng-repeat="cus in postObj.custs">
 <td>{{$index + 1}}</td>
 <td><input type="checkbox" ng-model="postObj.custs[$index].principal"/></td>
 <td>{{cus.Name}}</td>
 <td>{{cus.Phone}}</td>
 <td>{{cus.AddPre}}</td>
 <td><input type="text" class="form-control" ng-model="postObj.custs[$index].relation"/></td>
 <td>
     <button ng-click="deleteCus(cus)">Delete</button>
 </td>

<强>演示

  

http://sqlfiddle.com/#!9/2d5cb8/12

答案 3 :(得分:0)

简单的方法是将SUBQUERYGROUP BYHAVING子句一起使用。我们可以返回重复的行但没有is_published = 1然后加入外部查询以返回匹配ID的记录

SELECT t.id,
    t.user_id,
    t.post_title,
    t.is_published 
FROM temp t
INNER JOIN (SELECT user_id
            FROM temp
            GROUP BY user_id HAVING SUM(is_published) = 0) u ON u.user_id = t.user_id
ORDER BY t.id

<强>输出:

id  user_id post_title  is_published
1   9332    some title  0
3   9332    some title  0
7   3221    some title  0
8   3221    some title  0

答案 4 :(得分:0)

E.g:

注意:不要在表/列标识符中使用空格。我已相应地修改了列名。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DialogueSuper : MonoBehaviour
{

    public IChoiceHandler ch = null;

    public DialogueSuper(IChoiceHandler ch)
    {
        this.ch = ch;
    }

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    public void end()
    {
        ch.Next()
    }
}