Множественное ОБЪЕДИНЕНИЕ, возвращающее беспорядочные результаты

#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. Он начал работать после изменения всех псевдонимов. Спасибо!