我有4个具有相同列集的表,例如车型名称,描述和价格。
两个桌子可以具有相同的汽车型号。需要在不同的表格中找到价格不同的汽车型号。
这是我正在考虑做的事情:
这是正确的方法吗?有人可以帮忙提供示例代码吗?
答案 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)
您将不了解使用此方法的区别在于哪个表。可以反驳,但这不是必须的