首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较我的两个SQL表?

如何比较我的两个SQL表?
EN

Stack Overflow用户
提问于 2018-02-26 07:53:51
回答 2查看 73关注 0票数 0

我有两个表,其中有一堆供应商端口,比两个屏幕截图中的字段多一些,但重要的字段是这里的3、供应商no、端口代码和端口活动。

我想用3种不同的方式比较这两张表:

  1. 表1有什么,表2没有什么?
  2. 表2有什么,表1没有什么?
  3. 这两个表都有什么,但它们是不同的,例如:表2中相同端口中的端口active =Y或表1和表N。

像这样比较他们最好的方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-02-26 09:18:26

如果SUPPLIER_NO可以被认为是主键,或者至少是唯一的,那么下面的查询将返回Table2中不可用的Table1中可用的内容

代码语言:javascript
运行
复制
SELECT A.*
FROM Table1 A
LEFT JOIN Table2 B
  ON A.SUPPLIER_NO = B.SUPPLIER_NO
WHERE B.SUPPLIER_NO IS NULL

只需切换Table1Table2,以获得Table2中可用的内容,而不是Table1中可用的内容。

要获得表之间的差异,可以使用set运算符,但您应该转换最后一个字段值,使其在两个表中都具有相同的域(例如,PORT_ACTIVETable2中的值应该使用'Y''N',而不是truefalse)。例如,我们可以考虑这个表Table2_Converted。然后,您可以在两个表之间执行一个MINUSEXCEPT操作(根据您正在使用的关系数据库管理系统可以是不同的)。

代码语言:javascript
运行
复制
SELECT *
FROM (SELECT T1.* FROM Table1 T1 INNER JOIN Table2_Converted T2 ON T1.SUPPLIER_NO=T2.SUPPLIER_NO)
MINUS
SELECT *
FROM (SELECT T2.* FROM Table1 T1 INNER JOIN Table2_Converted T2 ON T1.SUPPLIER_NO=T2.SUPPLIER_NO)

将返回两个表中可用的所有内容,但这在Table1中是不同的。

代码语言:javascript
运行
复制
SELECT *
FROM (SELECT T2.* FROM Table1 T1 INNER JOIN Table2_Converted T2 ON T1.SUPPLIER_NO=T2.SUPPLIER_NO)
MINUS
SELECT *
FROM (SELECT T1.* FROM Table1 T1 INNER JOIN Table2_Converted T2 ON T1.SUPPLIER_NO=T2.SUPPLIER_NO)

只需将这两个语句切换到两个表中都可用,但这在Table2中是不同的。

票数 0
EN

Stack Overflow用户

发布于 2018-02-26 10:32:19

除了https://stackoverflow.com/users/9405427/folco已经说过的内容之外,还可以在WHERE子句中使用NOT IN运算符。

在下面的示例中,我将考虑SUPPLIER_NO作为主键

代码语言:javascript
运行
复制
SELECT *
    -> FROM Supplier
    -> WHERE Supplier_No NOT IN(
    -> SELECT Supplier_No
    -> FROM Supplier2);

这是输出

代码语言:javascript
运行
复制
+----+-------------+-----------+--------+
|    | Supplier_No | Port_Code | Active |
+----+-------------+-----------+--------+
|  6 |         996 | CAN       | Y      |
|  7 |         996 | HKG       | Y      |
|  8 |         996 | SHA       | Y      |
|  9 |         996 | SHK       | Y      |
| 10 |         996 | TAO       | Y      |
| 11 |         996 | XMN       | Y      |
+----+-------------+-----------+--------+

反之亦然,以获取您想要的其他信息:

代码语言:javascript
运行
复制
SELECT *
    -> FROM Supplier2
    -> WHERE Supplier_No NOT IN(
    -> SELECT Supplier_No
    -> FROM Supplier);

产出:

代码语言:javascript
运行
复制
+----+-------------+-----------+-------------+
|    | Supplier_No | Port_Code | Port_Active |
+----+-------------+-----------+-------------+
|  1 |        1384 | YTN       | false       |
|  2 |        1543 | SHA       | true        |
|  3 |        1982 | SHA       | true        |
|  4 |        1662 | SHA       | true        |
|  5 |        1384 | SHA       | true        |
|  6 |        1543 | TAO       | true        |
|  8 |        1982 | TAO       | true        |
|  9 |        1662 | TAO       | true        |
| 10 |        1678 | SWA       | true        |
| 12 |        1991 | SWA       | true        |
| 13 |        1543 | XMN       | true        |
| 14 |        1982 | XMN       | true        |
| 15 |        1991 | CWN       | false       |
+----+-------------+-----------+-------------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48983760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档