Предположим, что у нас есть таблица Users
, которая хранит основную информацию о пользователяхSQL получить данные из таблицы, только если она не существует в другой таблице
UserId FirstName LastName
1 Maria Anders
2 Ana Trujillo
3 Antonio Moreno
4 Thomas Hardy
5 Christina Berglund
6 Hanna Moos
7 Frédérique Citeaux
8 Martín Sommer
у нас есть две таблицы Details
и Exception
, хранящие дополнительные детали о пользователях, на самом деле обе таблицы имеют одинаковую структуру
Details
стол
UserId Age
1 10
2 10
3 10
4 40
5 50
6 60
7 70
8 80
стол
UserId Age
1 100
2 100
3 100
Я хочу написать запрос, чтобы получить подробную информацию о всех пользователях с Exceptions
и details
, если пользователь информацией хранится в exceptions
таблице следует переопределить данные, хранящиеся в details
таблице в противном случае получить данные из details
таблица поэтому результат должен быть
UserId FirstName LastName Age
1 Maria Anders 100
2 Ana Trujillo 100
3 Antonio Moreno 100
4 Thomas Hardy 40
5 Christina Berglund 50
6 Hanna Moos 60
7 Frédérique Citeaux 70
8 Martín Sommer 80
так в этом примере Мария, Ана и Антонио с идентификаторами 1, 2, 3 имеют возраст 10 в details
таблице, но becuase их данные хранятся в excpetions
, результат должен показывать возраст 100, для других пользователей нет информации в таблице excpetion
, поэтому мы просто получаем данные из таблицы details
.
на самом деле, я придумал решение, но я думаю, что лучше запрос я могу написать, вот мое решение
select u.UserId, u.FirstName , u.LastName , e.Age from Exceptions e
inner join Users u on u.UserId = e.UserId
union select u.UserId, u.FirstName , u.LastName , d.Age from Details d
inner join Users u on u.UserId = d.UserId
where d.UserId not in (select UserId from Exceptions)
есть ли способ избежать этого подзапрос? можем ли мы сделать лучше?
только что вставил точный запрос. но вы быстрее! – Badiparmagi
@Badiparmagi, тогда вы хороши в sql .. может быть, вы можете улучшить ответ, а затем отправить .. (используя isnull .. или другие ..) – scaisEdge
спасибо. возможно, вы можете добавить псевдоним типа «возраст» в случае имен имен «no column name». отличная работа. – Badiparmagi