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

Sql 在具有相同列的多个表之间匹配键值对,sql,inner-join,Sql,Inner Join,我有4个表,有相同的列集,例如车型名称、说明和价格 两张桌子可以有相同的车型。需要在不同的表格中找到价格不同的车型 以下是我的想法: 连接车型名称上的两个表,但价格不相等 对所有表组合重复1 以所有这些连接的并集为例 从3中找出不同的车型 这是正确的方法吗?有人能帮您提供示例代码吗?不确定您为什么需要工会: SELECT a.model, a.price, b.price, c.price, d.price FROM a INNER JOIN b on a.model = b.mod

我有4个表,有相同的列集,例如车型名称、说明和价格

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

以下是我的想法:

连接车型名称上的两个表,但价格不相等 对所有表组合重复1 以所有这些连接的并集为例 从3中找出不同的车型
这是正确的方法吗?有人能帮您提供示例代码吗?

不确定您为什么需要工会:

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中没有。但是,我没有从你的问题中得到这样的印象,事情就是这样

在这一点上,我不会选择所有不同的组合,而是首先组合,将它们分组,寻找MINprice与MAXprice不同的型号:

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)
使用这种方法,您将无法了解哪些表存在差异。这是可以反驳的,但这可能不是一项要求

最好是联合所有人。首先,如果车型在所有表中都有很多行,那么它的性能会更好。其次,它不会过滤掉不在所有四个表中的模型。