选择第二列唯一的第一列

时间:2016-06-07 16:03:30

标签: mysql

我不确定如何说出我的问题,但我们在这里......以我想要实现的目标为例。

我有一张桌子,看起来像这样:

  -------------------
    X_ID  |  Y_ID
  -------------------
      2   |   8
      2   |   12
      3   |   19
      3   |   19
  -------------------

我想为每个X_ID返回一行,该X_ID只有一个Y_ID用于该X_ID。

如果有>我不想退回一行1 Y_ID,用于特定的X_ID。而且,我想只返回符合上述规则的所有X_ID中的一行。

以上表为例,我需要一个查询,该表将为该表中的数据返回0行。

我需要相同的查询才能从下表返回1行

#TYPESomeTag, id, name, param

我需要一个返回一行的查询 - 底部的两个。

我只需要X_ID。

我使用DISTINCT和GROUP BY尝试了尽可能多的尝试。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

奇怪的是,这在MSSQL中会更复杂,因为它需要你对X_ID和Y_ID进行分组;但这应该有效。通常,结果中的Y_ID将是对该组中找到的所有Y_ID值的有效随机选择;但由于我们专门过滤掉具有多个Y_ID的组,因此它最终成为您需要的确切Y_ID。

SELECT X_ID, Y_ID 
FROM (
   SELECT X_ID, Y_ID, COUNT(DISTINCT Y_ID) AS yCount
   FROM theTable
   GROUP BY X_ID
   HAVING yCount = 1
) AS subQ
;

我不太了解MSSQL的复杂性,但我认为这会起作用(对于MySQL和MSSQL)。

SELECT t1.X_ID, t1.Y_ID
FROM theTable AS t1
INNER JOIN (
   SELECT X_ID, COUNT(DISTINCT Y_ID) AS yCount
   FROM theTable
   GROUP BY X_ID
   HAVING COUNT(DISTINCT Y_ID) = 1
) AS t2 ON X_ID
;

我说认为,因为我并非100%确定MSSQL支持COUNT(DISTINCT value)

答案 1 :(得分:0)

你可以试试这个。它应该做你想做的事。

SELECT X_ID, Y_ID FROM theTable
GROUP BY X_ID
HAVING COUNT(DISTINCT X_ID, Y_ID) = 1