【问题标题】:SQL How to compare data in two tables and get the results that are different between two tablesSQL如何比较两个表中的数据并得到两个表之间不同的结果
【发布时间】:2017-01-14 04:21:26
【问题描述】:

有 2 张桌子。表 a 和 b。 A 包含 msisdn、firstname、secondname、lastname、regdate(注册数据)。表 b 也有相同的字段。我想比较这两个表,msisdn's、firstname 和 lastname 字段。如果表 A 中的 msisdn X 的名字为 jim,姓氏为 halpert,并且相同的 msisdn X 在表 B 中的名字为 michael,第二名为 scott,我需要将这些类型的 msisdn 作为我的查询结果。在两个表和不同名称中具有相同 msisdn 的那个。如果这些名称(名字或姓氏)中的任何一个不匹配,则应将其显示为结果。

如果我没有准确地解释这个场景,我很抱歉。我希望有人能理解并回答这个问题。

谢谢:)

【问题讨论】:

    标签: sql database oracle11g


    【解决方案1】:
    SELECT A.*, B.* 
    FROM TABLEA A
    INNER JOIN TABLEB B ON A.MSISDN = B.MSIDN
    WHERE A.firstname != B.firstname 
    OR A.lastname != B.Lastname
    

    【讨论】:

    • 非常感谢。这是完美的工作。另外,您能告诉我如何在这两个具有最近regdate的表中获取相同msisdn X的数据吗?
    • 我不太明白这个问题,但我确定您正在寻找的解决方案与WHERE regdate = (select max(regdate) from table WHERE ...)有关
    • msisdn X 在表 A 和表 B 中,有两个不同的注册日期。我需要查询这两个表并获得具有最近 regdate 的结果。就像表 A 中的 X regdate 是 01/04/2016 和表 B 中的 X regdate 是 01/08/2016,当我查询时我应该从 B 获取 X 的结果,因为它具有最新的 regdate
    • 我有一个解决方案,但我不确定它是不是最好的。我会问一个新问题,因为这是一个完全独立的问题。
    【解决方案2】:
    Select
        *
    From
        Table a
    join 
        Table2 b on a.msisdn = b.msisdn
    where 
        (a.firstname != b.firstname) OR (a.lastname != b.lastname)
    

    【讨论】:

      【解决方案3】:

      如果你的表没有任何外键,你可以试试这个:

      SELECT tableA.*, tableB.* 
      FROM tableA, tableB
      WHERE tableA.col1 != tableB.col1
      OR tableA.col2 != tableB.col2
      

      您可以使用任何您想要的运算符更改运算符,

      也许它看起来不那么专业,但对我来说更容易:)

      【讨论】:

        猜你喜欢
        • 2013-08-27
        • 2023-03-06
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多