查找具有相同列的行

时间:2017-04-18 13:17:47

标签: sql postgresql doctrine

我想知道如何在SQL中执行以下操作:

SELECT * 
FROM table_A 
WHERE id IN(:myValues)
AND other_colum has the same value

例如,如果我有一个会话表(iduser,idconversation),我想要SQL查询返回一些具有相同会话ID的ID。它应该返回

35;105
37;105
35;106
37;106

有35,37个idUsers和105,106个他们共同的对话。

为了更进一步,我使用 Doctrine和PostegreSQL ,我要查询的表格生成(多对多关系)但是我已经难以集成子查询。

  **public function getAllCommonConversationByUserId($ids)
  {
      return $this->createQueryBuilder('c')
          ->select('c.id')
          ->innerJoin('c.idUser', 'recievedConversation')
          ->where('recievedConversation IN (:ids)')
          ->andWhere('$qb->expr()->eq("SELECT id FROM table GROUP BY(id) HAVING COUNT(*) >1")')
          ->setParameter(':ids', $ids)
          ->getQuery()
          ->getResult();
  }**

3 个答案:

答案 0 :(得分:1)

只需:

SELECT * 
FROM table_A 
WHERE idconversation in ('105','106') and iduser in ('35','37')

<强>更新 你是说这个idconversation是否重复? (多次出现?)

如果是这样的话:

Select * 
From table 
where idconversation in 
(
Select idconversation 
From table
group by (idconversation)
Having count(*) >1
)
--where iduser in ('35','37')

答案 1 :(得分:0)

您可以使用group byhaving

进行对话
SELECT conversationid
FROM table_A 
WHERE userid in (35, 37)
GROUP BY userid
HAVING count(distinct userid) = 2;

如果您想要原始行,可以加入原始表格。

答案 2 :(得分:0)

尝试这样做:

select id, conversation
from [your table name]
where 
    conversation in (
        select conversation 
        from [your table name]
        where id in (35)
    )

它返回用户id = 35

的所有会话参与者

如果您的表格中有重复项,请在