gpt4 book ai didi

mysql - 如何从mysql中的表1中减去表?

转载 作者:行者123 更新时间:2023-11-28 23:49:59 26 4
gpt4 key购买 nike

我正在寻找一种简单的方法来从另一个表中减去一个表中存在的值。 MySQl 的某种“减号”运算符

http://www.techonthenet.com/sql/minus.php

通过代码删除它们(遍历第一个表,删除与第二个表匹配的行)将是我最后的选择,因为我已经简化了我的问题,但它要复杂得多。

请注意,复杂性在于重复的行。没有唯一字段,必须保留每个重复的行。

示例:

给定一个包含字母的表格(以任何给定的顺序),A 被写入 5 次,B 被写入 3 次:

Table1
+--+
|ID|
+--+
|A |
|A |
|A |
|B |
|A |
|B |
|B |
|A |
+--+

还有一个相同字母的表,A出现了2次,B出现了一次。

Table2
+--+
|ID|
+--+
|A |
|A |
|B |
+--+

所需的输出将是:

+--+
|ID|
+--+
|A |
|A |
|A |
|B |
|B |
+--+

A 在第一个表中出现 5 次,在第二个表中出现 2 次,这意味着输出中有 3 行。B 在第一个表中出现 3 次,在第二个表中出现 1 次,因此,结果将是 2 行。

谢谢

最佳答案

你可以试试这个:

select id from (
select id,concat(id,
case when id = @id then @rownum := @rownum+1 else @rownum:=1 end) as x,
@id:=id
from table1 inner join(select @rownum :=1,@id:='') n
) as t where x not in(
select x from(
select concat(id,
case when id = @id then @rownum := @rownum+1 else @rownum:=1 end) as x,
@id:=id
from table2 inner join(select @rownum :=1,@id:='') n2
) t2)

我们需要使用行号使列唯一。由于 mysql 不支持 rownum 作为 oracle,我们需要变量 (@rownum,@id) 来生成 rownumber。然后 table1 应该看​​起来像这样: A1,A2,A3 和 table2 也是。所以我们可以通过查询得到结果,比如 where id not in(id in table2.

关于mysql - 如何从mysql中的表1中减去表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com