Если вы используете SQL Server
, вы можете попробовать следующее:
SELECT c.id AS country_id,
c.country,
t.[user]
FROM (SELECT s.country_id,
s.[user],
Row_number()
OVER (
partition BY s.country_id
ORDER BY s.id) rn
FROM @second s) t
LEFT JOIN @country c
ON t.country_id = c.id
AND t.rn = 1
Демонстрация в сети
Вывод
+------------+-----------+-------+
| country_id | country | user |
+------------+-----------+-------+
| 1 | India | Ojas |
+------------+-----------+-------+
| NULL | NULL | Raj |
+------------+-----------+-------+
| NULL | NULL | Rohit |
+------------+-----------+-------+
| 2 | Australia | Robin |
+------------+-----------+-------+
| 3 | Canada | John |
+------------+-----------+-------+
| 4 | France | Kamal |
+------------+-----------+-------+
| 5 | Russia | Mary |
+------------+-----------+-------+
| NULL | NULL | Bipin |
+------------+-----------+-------+
Для других баз данных:
Тот же запрос может быть написан без ROW_NUMBER()
, как показано ниже, так что он будет работать на других базах данных, таких как mysql
.
SELECT c.id AS country_id,
c.country,
t.user
FROM (SELECT s.country_id,
s.user,
s.id,
CASE
WHEN (SELECT Min(id)
FROM second s2
WHERE s2.country_id = s.country_id) = s.id THEN 1
ELSE 0
END rn
FROM second s) t
LEFT JOIN country c
ON t.country_id = c.id
AND t.rn = 1
ORDER BY t.country_id ,t.id
MySQL db-fiddle