Gwe*_*ery 8 mysql sql database comparison subquery
我是MySQL用户.我有两个问题,我希望比较他们的平等结果.我想用一个返回true或false的查询来执行此操作,因此我的两个查询中的每一个都很可能采用子查询的形式.
我希望避免从两个查询返回结果并在应用程序级别比较它们,以减少通信并提高性能.如果可能的话,我还想避免在数据库级别循环结果,但如果没有别的办法,那就这样吧.
关于如何做到这一点,我已经搜索了高低不一的例子,但空手而归.一些示例代码将非常受欢迎,因为我是SQL编程的新手.谢谢!
注意:我正在寻找一个适用于任意两个任意查询的解决方案,所以我将不再发布我的两个查询恰好是什么.
Mat*_*lie 14
SELECT
CASE WHEN count1 = count2 AND count1 = count3 THEN 'identical' ELSE 'mis-matched' END
FROM
(
SELECT
(SELECT COUNT(*) FROM <query1>) AS count1,
(SELECT COUNT(*) FROM <query2>) AS count2,
(SELECT COUNT(*) FROM (SELECT * FROM query1 UNION SELECT * FROM query2) AS unioned) AS count3
)
AS counts
Run Code Online (Sandbox Code Playgroud)
如果 MySQL 支持的话,这会更容易一点,FULL OUTER JOIN还请注意,如果两个查询给出相同的结果但顺序不同,则将被视为等效
SELECT
COUNT(*)
FROM
(
(SELECT A, b, c FROM A) a
LEFT OUTER JOIN
(SELECT A, b, c FROM b) B
ON A.a = b.a and a.b = b.b and a.c = b.c
UNION
(SELECT A, b, c FROM A) a
RIGHT OUTER JOIN
(SELECT A, b, c FROM b) B
ON A.a = b.a and a.b = b.b and a.c = b.c
)
WHERE a.a is null or b.a is null
Run Code Online (Sandbox Code Playgroud)
如果计数 = 0 则两个查询相同
还因为我使用 UNION 重复项被删除。所以那里存在潜在的不准确性。