我有两个表,它们的结构类似于下面的两个表。名称:
ID | FirstName | LastName
__________________________
123 Akshay kumar
123 Salman khan
123 Johnny lever
123 Tom Cruise
城市:
ID | City
___________
123 Pune
现在,当我运行以下查询时:
Select N.*,C.* from Name N,City C where C.ID=N.ID and N.ID=123;
ID | FirstName | LastName | ID | City
_____________________________________________
123 Akshay kumar 123 Pune
123 Salman khan 123 Pune
123 Johnny lever 123 Pune
123 Tom Cruise 123 Pune
浦那正在重复4次。而我要输出如下:
ID | FirstName | LastName | ID | City
_____________________________________________
123 Akshay kumar 123 Pune
123 Salman khan
123 Johnny lever
123 Tom Cruise
名称和城市表数据之间没有任何关系,除了ID Coumn。同样,对于相同的ID,名称表的条目比城市表的条目多是强制性的。对于相同的ID,“城市表”中的行也可以比“名称表”中的行多(因此,左联接将不起作用)请帮助伙计们。
[这是一个要求,通常会在您的表示层中处理,例如PHP,或使用数据库的任何工具。话虽如此,我们实际上可以使用ROW_NUMBER
处理您的要求:
WITH cte AS (
SELECT n.FirstName, n.LastName, c.ID, c.City,
ROW_NUMBER() OVER (PARTITION BY c.ID, c.City ORDER BY n.LastName, n.FirstName) rn
FROM Name n
INNER JOIN City c ON c.ID = n.ID
WHERE n.ID = 123
)
SELECT ID, FirstName, LastName,
CASE WHEN rn = 1 THEN ID END AS ID,
CASE WHEN rn = 1 THEN City END AS City
FROM cte
ORDER BY
ID,
LastName,
FirstName;