在具有相同列的多个表之间匹配键值对

时间:2019-01-27 08:58:20

标签: sql inner-join

我有4个具有相同列集的表,例如车型名称,描述和价格。

两个桌子可以具有相同的汽车型号。需要在不同的表格中找到价格不同的汽车型号。

这是我正在考虑做的事情:

  1. 加入两张有关车型名称的表,但价格不相等
  2. 对表的所有组合重复#1
  3. 合并所有这些连接
  4. 从#3查找不同的汽车型号

这是正确的方法吗?有人可以帮忙提供示例代码吗?

1 个答案:

答案 0 :(得分:1)

不确定为什么需要工会:

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可能有福特野马,但C和D缺少这辆车-由于C / D的缺失,无论价格不同还是相同,联接都会隐藏野马。不过,您的问题并没有给我印象,

在这方面,我会先进行合并,而不是去寻找所有不同的对,然后将它们分组,然后查找具有不同于MAX(价格)的MIN(价格)的模型:

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)

您将不了解使用此方法的区别在于哪个表。可以反驳,但这不是必须的