Совпадение пары ключ-значение между несколькими таблицами с одинаковыми столбцами - PullRequest
0 голосов
/ 27 января 2019

У меня есть 4 таблицы с одинаковым набором столбцов, например, название модели автомобиля, описание и цена.

Две таблицы могут иметь одинаковые модели автомобилей.Нужно найти модели автомобилей с разными ценами в разных таблицах.

Вот что я думаю сделать:

  1. Соединить две таблицы по названию модели автомобиля, но цена не равна
  2. Повторите # 1 для всех комбинаций таблиц
  3. Объедините все эти объединения
  4. Найдите различные модели автомобилей из # 3

Этоправильный подход?Может кто-нибудь помочь с примером кода для него?

1 Ответ

0 голосов
/ 27 января 2019

Не знаю, зачем вам нужен союз:

SELECT a.model, a.price, b.price, c.price, d.price
FROM 
  a 
  INNER JOIN b on a.model = b.model
  INNER JOIN c on a.model = c.model
  INNER JOIN c on a.model = c.model
WHERE
  a.price <> b.price OR a.price <> c.price OR a.price <> d.price

Таким образом, вы не только знаете, что цена отличается, но и какая цена отличается; Похоже, вы потеряете эту информацию с вашим подходом (вы не указали, что выбираете что-либо, чтобы определить, какая пара таблиц вошла в объединение)

Объединение будет полезным, если не во всех таблицах есть все пары машин, например a и b могут иметь Ford Mustang, но этот автомобиль отсутствует в C и D - объединение скрывает мустанг из-за отсутствия в C / D, независимо от того, была ли цена другой или одинаковой. Из твоего вопроса у меня не сложилось впечатления, что так было, хотя

В этом отношении, вместо того, чтобы объединять все пары, объединяемые, я бы сначала объединил их, сгруппировал их и искал модели, имеющие МИНУТУ (цену), которая отличается от МАКСА (цены):

SELECT
  model,
  min(price),
  max(price)
FROM
  (
    SELECT model, price FROM a UNION ALL
    SELECT model, price FROM b UNION ALL
    SELECT model, price FROM c UNION ALL
    SELECT model, price FROM d
  )
GROUP BY
  model
HAVING min(price) <> max(price)

Вы теряете знание о том, в каких таблицах имеются различия в этом подходе. Этому можно противостоять, но это не может быть требованием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...