我不确定如何说出我的问题,但我们在这里......以我想要实现的目标为例。
我有一张桌子,看起来像这样:
-------------------
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尝试了尽可能多的尝试。
有什么想法吗?
答案 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