【问题标题】:fetch the unique data from two tables从两个表中获取唯一数据
【发布时间】:2015-07-03 09:31:48
【问题描述】:

我有两张桌子。产品 A 和产品 B。

产品A

+----+-------+
| ID | SubId |
+----+-------+
| A1 |  112  |
| B1 |  111  |
| C1 |  115  |
| D1 |  117  |
| E1 |  114  |
| F1 |  112  |
+----+-------+

产品B

+----+-------+
| ID | SubId |
+----+-------+
| A1 |  112  |
| B1 |  111  |
| C1 |  115  |
| G1 |  001  |
| H1 |  002  |
| k1 |  003  |
+----+-------+

我想编写一个查询,它检索两列 ID 和 SubId,并显示 ProductA 表中不在 ProductB 中的不同行。所以对于上面的表格。

预期结果

+----+-------+
| ID | SubId |
+----+-------+
| D1 |  117  |
| E1 |  114  |
| F1 |  112  |
+----+-------+

我怎样才能完成这项工作?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我也尝试使用左外连接和联合,但不幸的是得到了重复的结果,而不是我希望得到的结果。请帮忙
  • 请向我们展示您提出的一些要求
  • 把那个查询放在这里你尝试了什么

标签: mysql sql join


【解决方案1】:

查询

select distinct *
from productA
where not exists
(
  select null 
  from productB
  where productA.id = productB.id
  and productA.subid=productB.subid
);

Fiddle demo here

【讨论】:

  • @user3127368 :如果这解决了您的问题,请将其标记为答案。
【解决方案2】:

试试这个查询

select * from ProductA where not EXISTS(select * from productb)

【讨论】:

  • 它返回一个空集:(
  • 更多详情请参考此链接dev.mysql.com/doc/refman/5.0/en/…
  • 该查询没有意义。您应该根据链接的 mysql 手册重新编写答案。子查询应该与主查询有关联...
【解决方案3】:
SELECT <select_list>
FROM TableA A
FULL OUTER JOIN TableB B
ON A.Key==B.Key
WHERE A.Key is NULL OR B.Key IS NULL;

【讨论】:

    【解决方案4】:
    select * from productA a 
    left outer join productB b 
    on a.ID = b.ID 
    and a.subid=b.subid 
    where b.subid is null 
    and b.id is null;
    

    【讨论】:

    • 你能补充一些解释吗?
    【解决方案5】:

    更新

    24 次修订后!你现在有多喜欢我!

    http://sqlfiddle.com/#!9/954792/24


    SELECT
        foo.pid, 
        foo.sid from (
            SELECT 
                PA.`ID` as pid, 
                PA.`SubId` as sid 
            FROM 
                `ProductA` as PA
            LEFT JOIN 
                `ProductB` as PB
            ON 
                PA.`ID` = PB.`ID`
            WHERE 
                PB.`ID` is NULL
    
            UNION
    
            SELECT 
                P2A.`ID` as ppid, 
                P2A.`SubId` as ssid 
            FROM 
                `ProductA` as P2A
            RIGHT JOIN 
                `ProductB` as P2B
            ON 
                P2A.`ID` = P2B.`ID`
            WHERE 
                P2B.`ID` is NULL
       ) as foo
    

    这里有一个很好的链接来解释连接...

    http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

    【讨论】:

    • 虽然查询显示了想要的结果,但它包含了 ProductB 表中所有值为“NULL”的字段
    • 更新的答案,它是如何工作的。如果没有,我将放入 SQL fiddle 并确保它有效。 :)
    • 这个答案没有检索到 OP 需要的结果。这将返回两个表共有的行。
    • 哦,天哪,好吧,我把它放在小提琴里,待命....(即使我在 10 多年后仍然对加入感到困惑哈哈)
    • @user3127368 更新了答案。花了很长时间,但我明白了。 :) 请单击我的答案左侧的复选标记以表明它有效。谢谢!
    【解决方案6】:

    你应该尝试关注,

    Select * from ProductA A
      Left Join ProductB B on A.ID = B.Id
    Where B.Id is null or B.SubId is null
    

    它会给你想要的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2018-06-18
      • 2019-08-27
      • 2018-07-13
      • 2012-09-13
      相关资源
      最近更新 更多