#sql #ms-access #ms-access-2013
#sql #ms-access #ms-access-2013
Вопрос:
Я делаю домашнее задание, и в настоящее время у меня есть три таблицы.
[veiculos]
-placa (PK)
-categoria
-categoria_valor
-cor
-ano
[infracao]
-placa (PK)
-codigo
-descricao
-valor
-umt
-data
-hora
-local
[proprietario]
-placa (PK)
-nome
-endereco
Я должен выполнить SQL-запрос для получения результата placa, nome, endereco, codigo, descricao, valor, umt, data, hora, local, categoria, categoria_valor, cor, ano
Я использую это:
SELECT placa, null AS nome, null AS endereco, codigo, descricao, data, hora, local, valor, umt FROM infracao WHERE (placa=[@PLACA])
UNION
SELECT null AS placa, nome, endereco, null, null, null, null, null AS tipo, null, null FROM proprietario WHERE (placa=[@PLACA])
UNION
SELECT null, null, null, null, null, null, categoria AS tipo, categoria_valor, cor, ano FROM veiculos WHERE (placa=[@PLACA])
;
И результат беспорядочный, он должен возвращаться в один столбец, но использует три столбца, как вы можете видеть здесь: https://i.imgur.com/F1xp8x9.png
Как я могу это решить? Вы можете мне помочь? Я использую MS Access 2013
Спасибо.
Комментарии:
1. Почему вы присоединяетесь с помощью
UNION
? почему бы не использоватьJOIN
?
Ответ №1:
используйте подзапрос и max()
select
max(placa) as laca,
max(nome) as nome,
max(endereco) as endereco,
max(codigo) as codigo,
max(descricao) as descricao,
max(data) as data,
max(hora) as hora,max(local) as local,max(valor) as valor,
max(umt) as umt from
(SELECT placa, null AS nome, null AS endereco, codigo, descricao, data, hora, local, valor, umt FROM infracao WHERE (placa=[@PLACA])
UNION
SELECT null AS placa, nome, endereco, null, null, null, null, null AS tipo, null, null FROM proprietario WHERE (placa=[@PLACA])
UNION
SELECT null, null, null, null, null, null, categoria AS tipo, categoria_valor, cor, ano FROM veiculos WHERE (placa=[@PLACA])
) a
Комментарии:
1. Спасибо! Он работает только с одной строкой, как и ожидалось, но имя таблицы показывает что-то вроде «Expr (num)», как вы можете видеть здесь: prntscr.com/nf5nke Вы знаете, как это исправить?
2. @bilb0k отредактированный ответ на самом деле вам нужно использовать псевдоним столбца, кстати, если это помогает пометить как принятый
3. Здравствуйте, я получаю эту ошибку сейчас:
circular reference caused by alias laca
4. Он начал работать после изменения всех псевдонимов. Спасибо!