gpt4 book ai didi

MySQL : How to find non duplicate rows with left join?

转载 作者:可可西里 更新时间:2023-11-01 08:26:14 24 4
gpt4 key购买 nike

几天前我在 Mysql 中遇到了一个问题,我无法解决它(我对 DB 很糟糕),我希望你能帮助我 :)我将简化问题,以便您可以看到我卡在哪里!

我有两个表:

current_stock (article_id, ...)
stock_record (id, article_id)

Current_stock 描述的是实际库存,stock_record 是已经盘点的元素。

当我想将文章留在库存中(那些在 current_stock 但不在 stock_record 中的),并且当我得到多个相同的 articles_id 时,问题就来了

我试过了:

SELECT * 
FROM current_stock
WHERE NOT EXISTS (
SELECT * FROM stock_record)

和其他形式如:

SELECT *
FROM current_stock
LEFT JOIN (SELECT * FROM stock_record) second
WHERE second.article_id IS NULL

但是,当在 current_stock 中有多行具有相同的 article_id,并且在 stock_record 中有一行具有此 article_id,我没有得到好的结果!

例如:

current_stock (article_id)
8315
8315
8315

stock_record (id, article_id)
15, 8315

我希望结果有两行 article_id 8315 !

(抱歉我的英语不好,希望你们能理解我!)

编辑:

使用这些表格我没有得到任何结果,因为“NOT EXISTS”或“LEFT JOIN”排除了 current_stock 中具有此 article_id 的所有行。

我只想排除 stock_record 中的行数

例如:

我的 current_stock 中有 10 篇文章(article_id = 8315)
我的 stock_record 中已经扫描了 3 篇文章(article_id = 8315)

我希望结果有 7 行 this article_id。

最佳答案

您可以使用变量来枚举记录。然后加入行号并忽略 stock_record 中匹配的行:

SELECT t1.*
FROM (
SELECT *,
@rn1 := IF(@aid = article_id, @rn1 + 1,
IF(@aid := article_id, 1, 1)) AS rn1
FROM current_stock
CROSS JOIN (SELECT @rn1 := 0, @aid := 0) AS vars
ORDER BY article_id) AS t1
LEFT JOIN (
SELECT article_id,
@rn2 := IF(@aid = article_id, @rn2 + 1,
IF(@aid := article_id, 1, 1)) AS rn2
FROM stock_record
CROSS JOIN (SELECT @rn2 := 0, @aid := 0) AS vars
ORDER BY article_id
) AS t2 ON t1.article_id = t2.article_id AND t1.rn1 = t2.rn2
WHERE t2.article_id IS NULL

关于MySQL : How to find non duplicate rows with left join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451968/

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